是否可以更改当前过程的环境变量?
在Python脚本更具体地说我想改变LD_LIBRARY_PATH,这样在模块“X”依赖于一些进口xyz.so,xyz.so从我给出的路径采取的LD_LIBRARY_PATH
LD_LIBRARY_PATH
xyz.so
还有其他方法可以动态更改从库加载位置的路径吗?
编辑 :我想我需要提及的是,我已经尝试过类似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.1Solaris上),但是该加载程序仅LD_LIBRARY_PATH在进程启动时立即查看。 在 这一点 之后 更改LD_LIBRARY_PATH当前过程中的值无效(就像该问题的答案所说)。
ld- linux.so.2
ld.so.1
您确实有一些选择:
答:如果您知道需要xyz.so使用/some/path,并从一开始就控制python脚本的执行,则只需LD_LIBRARY_PATH根据自己的喜好进行设置(在检查是否已设置好之后),然后重新执行自己。这是做什么的Java。
/some/path
Java
B.您可以 在 导入 之前/some/path/xyz.so通过其绝对路径导入。然后,您导入时,加载程序将发现它已经加载了,并且将使用已加载的模块,而不是再次搜索它。 __x.so``x.so``xyz.so
/some/path/xyz.so
x.so``x.so``xyz.so
C.如果您x.so自己构建,则可以添加-Wl,-rpath=/some/path到其链接行,然后导入x.so将使加载程序在中查找依赖的模块/some/path。
x.so
-Wl,-rpath=/some/path