Python:平台独立的修改PATH环境变量的方法


Answers:


170

您应该能够进行修改os.environ

由于os.pathsep是分隔不同路径的字符,因此应使用此字符追加每个新路径:

os.environ["PATH"] += os.pathsep + path

或者,如果要在列表中添加多个路径:

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)

如前所述,os.path.join在必须从单独的部分构造路径的情况下,也可以用于必须附加的每个路径。


PATH环境分隔符怎么办??linux-/ usr / bin:/ lib:“:” Windows-C:\ asdf \; C:\ Prog ...; “;”
布阿

2
@bua:您是说os.pathsep我提到的(特定于PATH)吗?
RedGlyph

@RedGlyph是的,很抱歉,我认为os.pathsep是“ /”和“ \”。我没有在声称之前检查过;)。
布阿

11
@bua:这几乎是一个“陷阱” os.path.sep != os.pathsep
krawyoti

@krawyoti,布阿:啊,现在我明白了……很好看!这确实是一个容易犯的错误:-)
RedGlyph

17

请注意,这os.environ实际上不是字典。这是一个类似于字典的特殊对象,它实际上使用setenv在当前进程中设置环境变量。

>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'

这意味着PATH(和其他环境变量)对于在同一进程中运行的C代码是可见的。

(由于注释不能包含格式,因此我必须在答案中注明,但是我觉得这很重要。这实际上是对注释的评论,因为它不等同于'export'。)


6

在Python中修改环境变量时需要注意的警告是,没有等效的“ export” shell命令。无法将更改注入当前流程,只能将其注入子流程。


+1:明智地指出这一点,然后应从Python应用程序中使用或命令os.system,以启动其他进程。否则,这毫无意义。os.popensubprocess.Popen
RedGlyph

14
这不是真的。
雕文

4
澄清Glyph的陈述:这是不正确的,因为更改注入到当前进程(即python进程)中。OP可能意味着无法将更改注入父进程(通常是执行python脚本的外壳)。
PonyEars,2013年

4
如果这就是OP的意思,那么Shell也就不具备此功能。export导致将变量复制到所有进程的环境中,但对父进程没有影响。
Kyle Strand 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.