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

2025-03-11 08:54:00
admin
原创
43
摘要:问题描述:据我所知,对 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1969  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1440  
  在企业运营过程中,跨部门协作效率的高低直接影响着项目的推进速度与质量,进而关乎企业的整体竞争力。PLM(产品生命周期管理)项目管理软件作为一种强大的工具,正逐渐在提升跨部门协作效率方面发挥着关键作用。它打破了部门之间的信息壁垒,优化了业务流程,为企业各部门之间的协同工作提供了有力支持。PLM项目管理软件打破信息壁垒信息...
plm合规性管理   24  
  PLM(Product Lifecycle Management)软件,即产品生命周期管理软件,旨在助力企业对产品从概念设计到退役处理的全生命周期进行有效管理。通过整合产品数据、流程以及人员,PLM软件能显著提升企业的创新能力、生产效率并降低成本。然而,PLM软件的实施并非易事,众多企业在落地过程中遭遇诸多挑战。要实现...
国内plm系统排名   31  
  研发过程的可视化对于企业提升效率、保障项目顺利推进至关重要。PLM(产品生命周期管理)系统作为整合产品全生命周期信息的重要工具,与甘特图相结合,能为研发过程可视化提供强大支持。通过对PLM系统支撑下甘特图的优化展现,可以让项目团队成员、管理层等清晰了解研发进度、资源分配等关键信息,从而做出更科学的决策。接下来,我们将详...
plm系统主要干什么的   22  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用