gpt4 book ai didi

python - 更改当前进程环境的 LD_LIBRARY_PATH

转载 作者:IT老高 更新时间:2023-10-28 20:32:22 30 4
gpt4 key购买 nike

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

更具体地说,在 python 脚本中,我想更改 LD_LIBRARY_PATH 以便在导入依赖于某些 xyz.soxyz 的模块“x”时.so 取 self 在 LD_LIBRARY_PATH 中的给定路径

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

编辑:我想我需要提到我已经尝试过类似的东西os.environ["LD_LIBRARY_PATH"] = mypathos.putenv('LD_LIBRARY_PATH', mypath)

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

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

最佳答案

原因

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

不起作用很简单:这个环境变量控制动态加载器的行为(Linux 上的ld-linux.so.2ld.so.1 Solaris),但加载程序仅在进程启动时查看一次 LD_LIBRARY_PATH。在当前进程之后更改 LD_LIBRARY_PATH 的值无效(正如 this 问题的答案所说)。

您确实有一些选择:

A.如果你知道你将需要 /some/path 中的 xyz.so,并从一开始就控制 python 脚本的执行,那么只需设置 LD_LIBRARY_PATH 根据自己的喜好(在检查它是否尚未设置后),然后重新执行自己。这就是 Java 所做的。

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

C.如果你自己构建x.so,你可以在其链接行添加-Wl,-rpath=/some/path,然后导入x.so 将导致加载器在 /some/path 中查找依赖模块。

关于python - 更改当前进程环境的 LD_LIBRARY_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1178094/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com