【发布时间】:2010-12-13 11:09:29
【问题描述】:
有没有办法使用python以独立于平台的方式修改PATH环境变量?
类似于os.path.join()的东西?
【问题讨论】:
标签: python path cross-platform environment-variables
有没有办法使用python以独立于平台的方式修改PATH环境变量?
类似于os.path.join()的东西?
【问题讨论】:
标签: python path cross-platform environment-variables
你应该可以修改os.environ。
由于os.pathsep 是分隔不同路径的字符,您应该使用它来附加每个新路径:
os.environ["PATH"] += os.pathsep + path
或者,如果有多个路径要添加到列表中:
os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)
正如您所提到的,os.path.join 也可用于您必须附加的每个单独的路径,以防您必须从单独的部分构建它们。
【讨论】:
os.pathsep(特定于PATH)吗?
os.path.sep != os.pathsep 几乎是一个“陷阱”。
请注意,os.environ 实际上并不是字典。它是一个特殊的字典-like 对象,它实际上使用setenv 在当前进程中设置环境变量。
>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'
这意味着PATH(和其他环境变量)将对在同一进程中运行的 C 代码可见。
(由于cmets不能包含格式,所以我必须把这个放在答案中,但我觉得这是一个重要的观点。这真的是对the comment about there being no equivalent to 'export'的评论。)
【讨论】:
在 Python 中修改环境变量需要注意的是,没有等效的“export”shell 命令。无法将更改注入当前进程,只有子进程。
【讨论】:
os.system、os.popen 或 subprocess.Popen 这样的命令来启动其他进程。否则它几乎毫无意义。
export 导致将变量复制到所有 子 进程的环境中,但对父进程没有影响。
你可以这样刷新它
os.environ["PATH"] = os.environ["PATH"]
【讨论】: