如何在Python中使环境变量更改?

时间:2009-01-28 16:36:48

标签: python environment-variables

根据我的阅读,Python实例中对环境变量的任何更改仅在该实例中可用,并在实例关闭后消失。有什么方法可以让他们坚持到系统吗?

我需要这样做的原因是因为在我工作的工作室,像Maya这样的工具严重依赖环境变量来配置跨多个平台的路径。

我的测试代码是

import os
os.environ['FAKE'] = 'C:\\'

打开另一个Python实例并请求os.environ['FAKE']会产生KeyError

注意:可移植性将是一个问题,但我正在编写的小API将能够检查操作系统版本并在必要时触发不同的命令。

也就是说,我已经走了使用Windows注册表技术的路线,只会编写替代方法,在其他平台上调用shell脚本,因为它们已成为需求。

12 个答案:

答案 0 :(得分:9)

  

让他们坚持承诺   系统?

我觉得你在这里有点困惑。没有“系统”环境。每个进程都有自己的环境作为其内存的一部分。流程只能改变自己的环境。流程可以为其创建的流程设置初始环境。

如果您确实认为需要为系统设置环境变量,则需要在最初加载的位置更改它们,例如Windows上的注册表或Linux上的shell配置文件。

答案 1 :(得分:8)

您可以在命令行中使用SETX。

默认情况下,这些操作会在USER env vars上进行。 要设置和修改SYSTEM变量,请使用/ M标志

import os
env_var = "BUILD_NUMBER"
env_val = "3.1.3.3.7"
os.system("SETX {0} {1} /M".format(env_var,env_val))

答案 2 :(得分:7)

在Windows下,您可以使用this recipe通过注册表对环境变量进行持久更改,但这似乎有点过分。

回应Brian的问题,你想要完成什么?可能有一种更简单的方法。

答案 3 :(得分:5)

我不相信你能做到这一点;我能想到两种解决方法。

  1. os.putenv函数为您开始的进程设置环境,即os.system,popen等。根据您要执行的操作,也许您可​​以拥有一个主Python实例设置变量,然后生成新实例。

  2. 您可以运行一个shell脚本或批处理文件来为您设置它,但这样便于移植。见文章:

  3. http://code.activestate.com/recipes/159462/

答案 4 :(得分:3)

根据this discussion,你不能这样做。你想要完成什么?

答案 5 :(得分:3)

以这种方式思考。

您没有设置shell环境变量。

您正在使用某些给定的环境变量设置生成子shell;此子shell使用修改后的环境运行您的应用程序。

答案 6 :(得分:2)

您正在分配新进程,并且无法更改父进程的环境,因为如果从shell启动新的shell进程,则无法执行此操作

答案 7 :(得分:1)

您可能想尝试由Mark Hammond开发的Python Win32 Extensions,它包含在ActivePython中(或可以单独安装)。您可以在Hammond's and Robinson's book中了解如何执行许多与Windows相关的任务。

使用 PyWin32 访问windows COM对象,Python程序可以使用WScript.Shell的{​​{3}}(环境变量的集合)对象

答案 8 :(得分:1)

似乎有更简单的Windows解决方案

import subprocess 
subprocess.call(['setx', 'Hello', 'World!'], shell=True)

答案 9 :(得分:0)

从Python内部?不,它无法完成!

如果你没有绑定Python,你应该考虑使用shell脚本(sh,bash等)。 “source”命令允许您运行一个修改环境的脚本,并且会像你想要的那样“粘贴​​”你“源”脚本的shell。这里发生的是shell直接执行脚本而不是创建一个子-process来执行脚本。

这将非常便携 - 您可以在Windows上使用cygwin来执行此操作。

答案 10 :(得分:0)

尝试使用允许您通过注册表设置变量的 py-setenv

python -m pip install py-setenv

答案 11 :(得分:-2)

如果有人可能需要此信息。我意识到这是在7年前问的,但即使我忘记了有时候。

是的,有一种方法可以让它们“坚持”在窗户中。只需转到控制面板,系统,高级系统设置,当系统属性窗口打开时,您应该看到环境变量的选项(按钮)。根据您正在使用的操作系统(google it),获取此功能的过程略有不同。

选择(单击按钮),然后将打开“环境变量”窗口。它有2个分割窗口,顶部窗口应该是您的“用户名变量”。 。 。选择“新”,然后简单地设置变量。例如,我的一个是“Database_Password = mypassword”。

然后在您的应用程序中,您可以像这样访问它们:import os,os.environ.get('Database_Password')。您可以执行pass = os.environ.get('Database_Password')

之类的操作