如何为嵌入式Python intepreter设置环境变量值?

如何为嵌入式Python intepreter设置环境变量值?,python,embedded,environment-variables,Python,Embedded,Environment Variables,我需要在脚本中传递环境变量值,该值在嵌入式(iOS应用程序中)Python解释器中进行解释。我知道我可以在Py_Initialize之前使用setenv,但所有第三方库都可以使用它。是否有可能只为Python解释设置环境变量值?类似于Py\u SetEnvVar(char*name,char*value)的东西,可以在python脚本中使用: os.environ.get('MY_ENV_VAR') 好吧,你似乎不同意我的观点,但我会把它留在这里,以防有类似问题的人发现它有用。你可以在那时候投

我需要在脚本中传递环境变量值,该值在嵌入式(iOS应用程序中)Python解释器中进行解释。我知道我可以在
Py_Initialize
之前使用
setenv
,但所有第三方库都可以使用它。是否有可能只为Python解释设置环境变量值?类似于
Py\u SetEnvVar(char*name,char*value)
的东西,可以在python脚本中使用:

os.environ.get('MY_ENV_VAR')

好吧,你似乎不同意我的观点,但我会把它留在这里,以防有类似问题的人发现它有用。你可以在那时候投票否决它,或者你想投的任何东西,这是公平的


没有
Py_SetEnvVar
或任何类似内容,因为嵌入式解释器没有自定义环境。它在相同的进程中运行,因此环境是相同的,变量也是相同的。不能在一个进程中有两个独立的环境或子环境。如果Python代码依赖于环境变量,并且必须在嵌入式解释器中运行,那么这些变量在整个过程中都是可见的。如果您希望在同一过程中对第三方库隐藏变量,请不要使用环境变量。

谢谢您的完整回复。虽然我看不出嵌入式Python解释器没有任何理由不使用它的子环境,但我感谢您的帮助。我不是Python C API专家,但我可以看到
Py_SetPythonHome
方法,它似乎只设置Python_HOME环境变量,这样我就可以期待类似的方法来为解释脚本设置另一个自定义环境变量。如果您是对的,该函数的行为就好像
PYTHONHOME
被设置为其参数,但我不认为它实际上设置了环境变量。无论是哪种方式,无论是代码>::GEnEV(“Python Head”)< /C> > C++和<代码> OS.Ennury[Python Health](/Python Health[Python Heave])/<代码>在启动解释器后,与任何其他变量一样,都会产生相同的结果。环境是操作系统提供的一项功能,它始终与整个过程相关联。@jdehesa您的回答已经有很多年了,但我有一个问题。您说dll在同一个环境中运行,但是当我尝试绕过一个winapi函数时,它被python.dll使用(我已经检查了源代码),重定向不起作用。这提示我python.dll不是在同一环境中运行的。有什么想法吗?@z0rberg's我不知道WinAPI迂回到底是如何工作的,但我认为它与环境变量没有多大关系(这基本上就是我在这里所指的“环境”)。在某种情况下,用户似乎能够使用
with dll.exe
钩住Python解释器。我实际上没有使用“迂回”,只是使用相同的技术。我还没有弄明白“withdll”是如何工作的,但这不是这里的主题。谢谢你清理它。也许你可以想出一些其他的键/值存储,你可以从外部设置并从脚本中查询-即使是在原始内存缓冲区上构建它也不难。尽管使用带前缀的环境变量会有什么问题尚不清楚;如果流程中运行的某些东西您不信任,那么您的问题不在于环境变量。问题不在于信任,而在于重写变量值。无论如何,如果不可能为python设置环境变量,我不会尝试重新发明轮子,只要使用
setenv
,如果这不是信任问题,那么为python设置环境变量就像在名称前加前缀一样简单,即“just_for_python_FOO”