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

2025-03-11 08:54:00
admin
原创
38
摘要:问题描述:据我所知,对 Python 实例中的环境变量的任何更改都仅在该实例中可用,并且在实例关闭后消失。有没有办法通过将它们提交到系统来保留它们?我需要这样做的原因是,在我工作的工作室,像 Maya 这样的工具严重依赖环境变量来配置跨多个平台的路径。我的测试代码是import os os.environ['...

问题描述:

据我所知,对 Python 实例中的环境变量的任何更改都仅在该实例中可用,并且在实例关闭后消失。有没有办法通过将它们提交到系统来保留它们?

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

我的测试代码是

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

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

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

也就是说,我已经采用了使用 Windows 注册表技术的路线,并且将简单地编写替代方法,以便在其他平台上需要时调用 shell 脚本。


解决方案 1:

您可以在命令行使用 SETX。

默认情况下,这些操作在用户环境变量上进行。要设置和修改系统变量,请使用 /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:

让他们加入这个系统并坚持下去?

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

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

解决方案 3:

在 Windows 下,您可以使用此方法通过注册表使对环境变量的更改持久化,尽管这似乎有点小题大做。

回应 Brian 的问题,你想实现什么?可能有更简单的方法。

解决方案 4:

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

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

解决方案 5:

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

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

  2. 您可以运行 shell 脚本或批处理文件来为您设置它,但这样做的可移植性会大大降低。请参阅本文:

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

解决方案 6:

这样想想吧。

您没有设置 shell 环境变量。

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

解决方案 7:

根据此讨论,您无法做到这一点。您想要实现什么目的?

解决方案 8:

您正在分叉一个新进程,并且无法更改父进程的环境,就像您从 shell 启动新 shell 进程时无法更改一样

解决方案 9:

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

使用PyWin32访问 Windows COM 对象,Python 程序可以使用该对象的环境属性(环境变量的集合)WScript.Shell

解决方案 10:

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

python -m pip install py-setenv

解决方案 11:

从 Python 内部?不,这不可能!

如果您不局限于 Python,则应考虑使用 shell 脚本(sh、bash 等)。“source”命令允许您运行修改环境的脚本,并将“粘”到您“source”脚本的 shell 中。这里发生的事情是 shell 直接执行脚本,而不是创建子进程来执行脚本。

这将非常易于移植 - 您可以在 Windows 上使用 cygwin 来执行此操作。

解决方案 12:

以防有人需要这些信息。我知道这个问题是 7 年前问的,但有时我也会忘记是怎么问的。。

是的,有一种方法可以让它们“粘”在 Windows 中。只需转到控制面板、系统、高级系统设置,当系统属性窗口打开时,您应该会看到一个环境变量选项(按钮)。根据您使用的操作系统,获取此信息的过程略有不同(谷歌搜索)。

选择它(单击按钮),然后环境变量窗口将打开。它有 2 个分割窗口,上面的窗口应该是您的“您的用户名的用户变量”。...选择“新建”,然后只需设置变量即可。例如,我的一个是“Database_Password = mypassword”。

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1911  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1430  
  在制造业数字化转型的进程中,PLM(产品生命周期管理)系统、ERP(企业资源计划)系统、MES(制造执行系统)以及 CAD(计算机辅助设计)软件都扮演着至关重要的角色。然而,这些系统和软件各自独立运行时,往往难以发挥出最大的协同效应。实现 PLM 系统与 ERP、MES、CAD 的有效集成,成为提升企业整体竞争力、优化...
plm系统的主要功能模块   22  
  产品生命周期管理(PLM)作为一种先进的管理理念和技术,在电子与半导体行业正发挥着日益重要的作用。随着电子与半导体行业的快速发展,产品更新换代速度加快,市场竞争愈发激烈,企业面临着诸多挑战,如缩短产品上市时间、提高产品质量、降低成本等。而PLM的应用为企业应对这些挑战提供了有效的解决方案,展现出巨大的应用价值。提升产品...
plm项目   18  
  PLM(产品生命周期管理)项目管理软件在现代企业的产品研发、生产与运营中扮演着至关重要的角色。它整合了从产品概念设计到退役的全流程数据与流程,助力企业提升效率、降低成本并增强创新能力。随着科技的飞速发展以及企业需求的不断演变,未来十年 PLM 项目管理软件的发展充满了无限可能,值得深入探讨与预测。智能化与自动化趋势智能...
plm产品全生命周期管理   23  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用