是否可以更改当前进程的环境变量?
更具体地说,在我想更改的 python 脚本中LD_LIBRARY_PATH
因此,在导入模块“x”时,该模块依赖于某些xyz.so
, xyz.so
取自我在 LD_LIBRARY_PATH 中给定的路径
还有其他方法可以动态更改加载库的路径吗?
Edit:我想我需要提到我已经尝试过类似的事情
os.environ["LD_LIBRARY_PATH"] = mypath
os.putenv('LD_LIBRARY_PATH', mypath)
但这些会修改环境。对于生成的子进程,而不是当前进程,并且模块加载不考虑新的 LD_LIBRARY_PATH
Edit2,所以问题是我们是否可以更改环境或其他东西,以便库加载器看到它并从那里加载?
原因
os.environ["LD_LIBRARY_PATH"] = ...
不起作用很简单:这个环境变量控制动态加载器的行为(ld-linux.so.2
在Linux上,ld.so.1
在 Solaris 上),但加载程序只查看LD_LIBRARY_PATH
在进程启动时一次。改变值LD_LIBRARY_PATH
在当前流程中after该点没有影响(就像答案一样)this https://stackoverflow.com/questions/856116/changing-ldlibrarypath-at-runtime-for-ctypes问题说)。
你确实有一些选择:
A. 如果您知道您将需要xyz.so
from /some/path
,并从头开始控制python脚本的执行,然后只需设置LD_LIBRARY_PATH
根据您的喜好(在检查是否尚未如此设置后),然后重新执行自己。这是什么Java
does.
B、可以导入/some/path/xyz.so
通过其绝对路径before输入x.so
。当你导入时x.so
,加载器会发现它已经加载了xyz.so
,并且将使用已经加载的模块而不是再次搜索它。
C. 如果你建造x.so
你自己,你可以添加-Wl,-rpath=/some/path
到它的链接线,然后导入x.so
将导致加载器在中查找依赖模块/some/path
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)