【发布时间】:2017-03-13 15:32:28
【问题描述】:
我有一个在静态初始化期间加载环境变量的 c 扩展。我需要能够更改这些值并重新加载模块(我无法更改它们是静态加载的事实)。我尝试设置os.environ,但importlib 中似乎没有env 选项,例如subprocess.call
这是一个例子:假设我有一个如下定义的模块
#include <boost/python.hpp>
#include <cstdlib>
#include <string>
std::string get() {
return ::getenv("HOME");
}
BOOST_PYTHON_MODULE(sample) {
boost::python::def("get", &get);
}
我有 python 代码:
import importlib, os
import sample as s
print(s.get()) # prints /home/username
# do something like
# os.environ['HOME'] = 'foo'
importlib.reload(s)
print(s.get()) # I would like this to print 'foo'
也就是说,除了os.environ['HOME'] = 'foo',我还能做什么来导致c模块中的环境变量发生变化?
注意:我不能使用setenv,因为变量是静态加载的,我无法重新初始化所有依赖它们的东西。
【问题讨论】:
标签: python python-3.x python-importlib