Python:修改 PATH 环境变量的平台无关方式

Posted

技术标签:

【中文标题】Python:修改 PATH 环境变量的平台无关方式【英文标题】:Python: Platform independent way to modify PATH environment variable 【发布时间】:2010-12-13 11:09:29 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

你应该可以修改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...; ";" @bua:你的意思是我提到的os.pathsep(特定于PATH)吗? @RedGlyph 是的,对不起,我认为 os.pathsep 是“/”和“\”。在声明之前我没有检查过;)。 @bua:os.path.sep != os.pathsep 几乎是一个“陷阱”。 @krawyoti,bua:啊,现在我明白了……很好看!这确实是一个简单的错误:-)【参考方案2】:

请注意,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'的评论。)

【讨论】:

【参考方案3】:

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

【讨论】:

+1:明智地指出这一点,然后应该在 Python 应用程序中使用像 os.systemos.popensubprocess.Popen 这样的命令来启动其他进程。否则它几乎毫无意义。 对 Glyph 声明的澄清:这不是真的,因为更改注入到当前进程(即 python 进程)中。 OP 可能意味着无法将更改注入父进程(通常是执行 python 脚本的 shell)。 如果这就是OP的意思,那么shell也没有这个能力; export 导致将变量复制到所有 进程的环境中,但对父进程没有影响。【参考方案4】:

你可以这样刷新它

os.environ["PATH"] = os.environ["PATH"]

【讨论】:

您好,感谢您提供代码 sn-p。如果您能评论一下它是如何解决 OP 的问题的,那就太好了,这样我们都可以从中学习! 有些安装程序会修改 PATH,有些则不会。对于那些这样做的人,如果您需要在脚本的运行时获得当前的“新鲜” env PATH 状态,您可以像这样刷新它。示例:我正在通过脚本安装 gh。此安装程序修改路径。我需要在运行时访问“新”环境路径。这个解决方案就足够了。在其他情况下(未修改 PATH),上面发布的解决方案更好:os.environ["PATH"] += os.pathsep + path.

以上是关于Python:修改 PATH 环境变量的平台无关方式的主要内容,如果未能解决你的问题,请参考以下文章

java 里面的PATH和CLASSPATH分别代表啥路径 该怎样设置

怎么修改Win7环境变量PATH

python怎么设置环境变量

怎么把python添加到环境变量

win7 无法修改系统环境变量

python怎么设置环境变量