如何在Python中设置环境变量?

1212 投票
20 回答
1965648 浏览
提问于 2025-04-16 17:28

我需要在Python脚本中设置一些环境变量,并且希望所有从Python调用的其他脚本都能看到这些设置的环境变量。

如果我这样做,

os.environ["DEBUSSY"] = 1

它会报错,说1必须是一个字符串。

我还想知道在我设置了环境变量后,如何在Python中读取这些环境变量(在脚本的后面部分)。

20 个回答

122

os.environ 就像一个 Python 字典,所以你可以用字典常用的操作来处理它。除了其他回答中提到的 getset 操作,我们还可以简单地检查某个键是否存在。这里的键和值都应该用字符串来存储。

Python 3

在 Python 3 中,字典使用in 关键字来检查键是否存在,而不是使用 has_key

>>> import os
>>> 'HOME' in os.environ  # Check an existing env. variable
True
...

Python 2

>>> import os
>>> os.environ.has_key('HOME')  # Check an existing env. variable
True
>>> os.environ.has_key('FOO')   # Check for a non existing variable
False
>>> os.environ['FOO'] = '1'     # Set a new env. variable (String value)
>>> os.environ.has_key('FOO')
True
>>> os.environ.get('FOO')       # Retrieve the value
'1'

使用 os.environ 时有一个重要的注意事项:

虽然子进程会继承父进程的环境,但我最近遇到一个问题,发现如果在你的 Python 脚本运行时,有其他脚本在更新环境,那么再次调用 os.environ 不会反映最新的值

以下是来自文档的摘录:

这个映射在第一次导入 os 模块时被捕获,通常是在 Python 启动时作为处理 site.py 的一部分。在这之后对环境所做的更改不会反映在 os.environ 中,除非是通过直接修改 os.environ 来进行的更改。

os.environ.data 存储了所有的环境变量,它是一个字典对象,包含了所有的环境值:

>>> type(os.environ.data)  # changed to _data since v3.2 (refer comment below)
<type 'dict'>
161

你可能需要考虑一些额外的方面来增强代码的稳健性;

当你把一个整数类型的变量存储为环境变量时,可以试试

os.environ['DEBUSSY'] = str(myintvariable)

然后在取出这个变量时,为了避免错误,你应该尝试

os.environ.get('DEBUSSY', 'Not Set')

可以考虑用'-1'来代替'未设置'

所以,把这些内容整合在一起

myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))

print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)
1511

环境变量必须是字符串,所以你可以使用

import os
os.environ["DEBUSSY"] = "1"

来把变量 DEBUSSY 设置为字符串 1

想要在后面使用这个变量时,只需用

print(os.environ["DEBUSSY"])

就可以了。

子进程会自动继承父进程的环境变量,你不需要做任何特别的操作。

撰写回答