一尘不染

更改当前流程环境的LD_LIBRARY_PATH

python

是否可以更改当前过程的环境变量?

在Python脚本更具体地说我想改变LD_LIBRARY_PATH,这样在模块“X”依赖于一些进口xyz.soxyz.so从我给出的路径采取的LD_LIBRARY_PATH

还有其他方法可以动态更改从库加载位置的路径吗?

编辑 :我想我需要提及的是,我已经尝试过类似os.environ [“ LD_LIBRARY_PATH”] = mypath
os.putenv(’LD_LIBRARY_PATH’,mypath)的操作

但是这些修改了环境。对于生成的子流程,而不是当前流程,并且模块加载不考虑新的LD_LIBRARY_PATH

Edit2 ,所以问题是我们可以更改环境还是其他东西,以便库加载器看到它并从那里加载?


阅读 171

收藏
2020-12-20

共1个答案

一尘不染

原因

os.environ["LD_LIBRARY_PATH"] = ...

无效并不简单:此环境变量控制动态加载程序的行为(ld- linux.so.2在Linux和ld.so.1Solaris上),但是该加载程序仅LD_LIBRARY_PATH在进程启动时立即查看。
这一点 之后
更改LD_LIBRARY_PATH当前过程中的值无效(就像问题的答案所说)。

您确实有一些选择:

答:如果您知道需要xyz.so使用/some/path,并从一开始就控制python脚本的执行,则只需LD_LIBRARY_PATH根据自己的喜好进行设置(在检查是否已设置好之后),然后重新执行自己。这是做什么的Java

B.您可以 导入
之前/some/path/xyz.so通过其绝对路径导入。然后,您导入时,加载程序将发现它已经加载了,并且将使用已加载的模块,而不是再次搜索它。
__x.so``x.so``xyz.so

C.如果您x.so自己构建,则可以添加-Wl,-rpath=/some/path到其链接行,然后导入x.so将使加载程序在中查找依赖的模块/some/path

2020-12-20