Python设置环境变量

时间:2020-02-23 14:43:17  来源:igfitidea点击:

我们可以使用os模块在Python中设置环境变量。
Python os模块" environ"用作字典,其中包含当时可用于程序的环境变量。

请注意,加载os模块时会生成环境变量字典,因此通过其他方式(例如通过Terminal导出)对环境变量的任何进一步更改都不会反映出来。

打印当前环境变量

我们可以打印os.environ变量,以了解程序可用的现有环境变量。

import os

# current environment variables
print(os.environ)

输出:

environ({'PATH': '/Library/PostgreSQL/10/bin:/Users/hyman/Downloads/mongodb/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/Users/hyman/Downloads/apache-maven-3.5.3/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', 'COMMAND_MODE': 'unix2003', 'MAVEN_OPTS': '-Xmx2048m -XX:MaxPermSize=128m', 'VERSIONER_PYTHON_VERSION': '2.7', 'LOGNAME': 'hyman', 'XPC_SERVICE_NAME': 'com.apple.xpc.launchd.oneshot.0x10000003.pycharm', 'PWD': '/Users/hyman/Documents/github/theitroad/Python-3/basic_examples', 'PYCHARM_HOSTED': '1', 'PYTHONPATH': '/Users/hyman/Documents/github/theitroad/Python-3', 'SHELL': '/bin/zsh', 'PAGER': 'less', 'LSCOLORS': 'Gxfxcxdxbxegedabagacad', 'PYTHONIOENCODING': 'UTF-8', 'SECURITYSESSIONID': '186a8', 'OLDPWD': '/Applications/PyCharm CE.app/Contents/bin', 'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'USER': 'hyman', 'ZSH': '/Users/hyman/.oh-my-zsh', 'TMPDIR': '/var/folders/1t/sx2jbcl534z88byy78_36ykr0000gn/T/', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.1o59WVsq9I/Listeners', 'XPC_FLAGS': '0x0', 'PYTHONUNBUFFERED': '1', 'M2_HOME': '/Users/hyman/Downloads/apache-maven-3.5.3', '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0', 'Apple_PubSub_Socket_Render': '/private/tmp/com.apple.launchd.U1NEZUKVjH/Render', 'LESS': '-R', 'LC_CTYPE': 'UTF-8', 'HOME': '/Users/hyman', '__PYVENV_LAUNCHER__': '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7'})

检查环境变量是否存在?

我们可以使用in语句检查环境变量是否存在。

if 'HOME' in os.environ:
  print('HOME environment variable is already defined. Value =', os.environ['HOME'])
else:
  print('HOME environment variable is not defined.')

输出:

HOME environment variable is already defined. Value = /Users/hyman

更改环境变量值可能会对程序的执行产生严重影响。
因此,建议首先检查环境变量是否存在。
然后由您决定是否要修改值。
您始终可以定义一个新的环境变量,并在程序中使用它。

Python设置环境变量

我们可以像在字典中设置值那样设置环境变量。

os.environ['MYSQL_VERSION'] = '5.7.18'

请注意,环境变量键值对必须是字符串,否则将引发错误。

>>> os.environ['Data'] = 123
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 683, in __setitem__
  value = self.encodevalue(value)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 753, in encode
  raise TypeError("str expected, not %s" % type(value).__name__)
TypeError: str expected, not int
>>>

Python读取环境变量

让我们看看如何读取在以上代码段中设置的环境变量。

print('MySQL Version =', os.environ['MYSQL_VERSION'])

但这是检索环境变量值的正确方法吗?让我们看看不存在环境变量时会发生什么。

>>> print(os.environ['DATA'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 678, in __getitem__
  raise KeyError(key) from None
KeyError: 'DATA'
>>>

更好的方法是使用环境变量的get()函数。
如果环境变量不存在,则它将返回"无"。

>>> print(os.environ.get('DATA'))
None

如果环境变量不存在,我们还可以指定默认值以返回。

>>> print(os.environ.get('DATA', 'TXT'))
TXT