有没有办法在Python查找共享库的运行时设置specify?
我在fontforge_bin
中找到了fontforge.so
,并尝试了以下操作
os.environ['LD_LIBRARY_PATH']='fontforge_bin'
sys.path.append('fontforge_bin')
import fontforge
然后得到
ImportError: fontforge_bin/fontforge.so: cannot open shared object file: No such file or directory
对ldd
执行fontforge_bin/fontforge.so
操作可以得到以下结果
linux-vdso.so.1 => (0x00007fff2050c000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007f10ffdef000)
libc.so.6 => /lib/libc.so.6 (0x00007f10ffa6c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f110022d000)
在导入模块之前,脚本可以检查环境变量的存在性/适当性,然后在os.environ中设置它(如果缺少),然后调用os.execv()重新启动python解释器,该解释器使用的命令行参数与更新的环境变量集相同。
这仅在任何其他导入(os和sys除外)之前才建议,因为可能存在模块导入的副作用,如打开的文件描述符或套接字,这可能对干净地关闭造成挑战。
此代码设置LD_LIBRARY_PATH和ORACLE_HOME:
将该环境变量设置为启动环境的一部分(在父进程或systemd/etc作业文件中)可能更干净。
…很好,您可以通过ctypes从您选择的某个文件夹中加载所有库,从而使它们对您可用,而不管LD_LIBRARY_路径如何。
或者遍历该目录中的文件。。。你得到了这个想法,一旦它被加载,它就为你而存在[如果依赖项也超出了默认路径,你也应该加载它们…]。
LD_LIBRARY_PATH
设置动态链接器路径;该路径通常在运行时无法更改,因为它通常由动态链接器缓存。不过,这不是Python查找imports的地方,包括模块导入。更改
sys.path
是正确的。(顺便说一句,您可能需要对库进行ldd,以查看库中是否有任何奇数导入路径。“重要提示:fontforge_bin/fontforge.so“看起来很奇怪。)
相关问题 更多 >
编程相关推荐