有没有办法设置指定运行时期间Python 在哪里寻找共享库?
I have fontforge.so
位于fontforge_bin
并尝试了以下方法
os.environ['LD_LIBRARY_PATH']='fontforge_bin'
sys.path.append('fontforge_bin')
import fontforge
and get
ImportError: fontforge_bin/fontforge.so: cannot open shared object file: No such file or directory
Doing ldd
on 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() https://docs.python.org/2/library/os.html#os.execv使用相同的命令行参数但更新的一组环境变量重新启动 python 解释器。
这只是建议before任何其他导入(除了 os 和 sys),因为潜在的模块导入副作用,例如打开的文件描述符或套接字,可能难以彻底关闭。
此代码设置 LD_LIBRARY_PATH 和 ORACLE_HOME:
#!/usr/bin/python
import os, sys
if 'LD_LIBRARY_PATH' not in os.environ:
os.environ['LD_LIBRARY_PATH'] = '/usr/lib/oracle/XX.Y/client64/lib'
os.environ['ORACLE_HOME'] = '/usr/lib/oracle/XX.Y/client64'
try:
os.execv(sys.argv[0], sys.argv)
except Exception, exc:
print 'Failed re-exec:', exc
sys.exit(1)
#
# import yourmodule
print 'Success:', os.environ['LD_LIBRARY_PATH']
# your program goes here
将该环境变量设置为启动环境的一部分(在父进程或 systemd/etc 作业文件中)可能会更干净。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)