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.system
、os.popen
或 subprocess.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 环境变量的平台无关方式的主要内容,如果未能解决你的问题,请参考以下文章