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

res*_*esi 78 python cross-platform path environment-variables

有没有PATH办法使用python以独立于平台的方式修改环境变量?

类似的东西os.path.join()

Red*_*yph 149

你应该能够修改os.environ.

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

os.environ["PATH"] += os.pathsep + path
Run Code Online (Sandbox Code Playgroud)

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

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)
Run Code Online (Sandbox Code Playgroud)

正如您所提到的,os.path.join在必须从单独的部分构造它们的情况下,也可以用于必须附加的每个单独路径.

  • @bua:这几乎是"os.path.sep!= os.pathsep`的"问题". (10认同)
  • @bua:你的意思是我提到的`os.pathsep`(特定于PATH)? (2认同)

Gly*_*yph 17

请注意,这os.environ实际上不是字典.这是一个特殊的dictionary- 喜欢对象,它实际使用设置在当前进程的环境变量SETENV.

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

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

(由于评论不能包含格式,我必须把它放在一个答案中,但我觉得这是一个重要的观点.这实际上是关于没有相当于'export'的评论的评论.)


Mat*_*t T 6

需要注意的是在Python中修改环境变量,就是没有"export"shell命令的等价物.没有办法将更改注入当前进程,只有子进程.

  • 这不是真的. (12认同)
  • 澄清Glyph的陈述:这不是真的,因为更改*被注入当前进程(这是python进程).OP可能意味着无法将更改注入父进程(通常是执行python脚本的shell). (3认同)
  • 如果那是OP的意思,那么shell也没有这个功能; `export`导致变量被复制到所有*子*进程的环境中,但对父进程没有影响. (3认同)