python - 从 Python 内部设置 LD_LIBRARY_PATH

标签 python linux fontforge

有没有办法设置指定在运行时 Python 查找共享库的位置?

我有 fontforge.so 位于 fontforge_bin 并尝试了以下

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

fontforge_bin/fontforge.so 上执行 ldd 会得到以下结果

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:

#!/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 作业文件中)可能更简洁。

关于python - 从 Python 内部设置 LD_LIBRARY_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543847/

相关文章:

fonts - fontforge - 合并字体以添加字形的脚本

linux - 添加到 FontForge 后位图字形不显示

Python Instagram API - API 请求失败

c - 为什么 C clock() 返回 0

python - SciPy 中的 spearmanr 使用什么显着性检验?

linux - 使用 awk 找到或未找到显示匹配

linux - perf_event_open 溢出信号

ios - 字体在 iOS 中没有字距调整

python - 转到 "http://127.0.0.1:8000/restaurant/sign-in/"页面时出现页面未找到 (404) 错误

python - Django查询集根据现有字段更新