python - python在导入模块时如何加载*.so

标签 python import shared-libraries

我使用的python包名为cx_Oracle,它依赖于oracle instantclient动态共享库libclntsh.so.11.1

[wangxw@rhel7 ~]$ ldd /usr/lib64/python2.7/site-packages/cx_Oracle.so
    linux-vdso.so.1 =>  (0x00007fffea5fe000)
    libclntsh.so.11.1 => not found
    libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f5c02bbe000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5c029a2000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f5c025e0000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f5c023db000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f5c021d8000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f5c01ed6000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5c031c1000)

我在 bash 中将 LD_LIBRARY_PATH 设置为 oracle instantclient 的 home,工作正常:

[wangxw@rhel7 ~]$ export LD_LIBRARY_PATH=/home/wangxw/instantclient
[wangxw@rhel7 ~]$ python
Python 2.7.5 (default, Nov  6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>

但是当在python中设置LD_LIBRARY_PATH时,它不起作用:

[wangxw@rhel7 ~]$ python
Python 2.7.5 (default, Nov  6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import os
>>> os.environ['LD_LIBRARY_PATH'] = '/home/wangxw/instantclient'
>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory
>>>

我很好奇 python 如何加载 libclntsh.so.11.1,以及如何在 python 而不是 bash 中加载该文件。

最佳答案

您无法从正在加载需要它的模块的进程内部设置LD_LIBRARY_PATH环境变量。在执行应用程序之前,需要在父流程变量的流程环境中设置它。

关于python - python在导入模块时如何加载*.so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45981301/

相关文章:

python - Nosetest 和 Google API : "no module named apiclient.discovery"

Python Pygame Loop 异常延迟

android - AS3 mp3 数组中的对象并检索和播放它们请帮助 AS3 新手

go - 在同一个文件中处理不同版本的包

c - Sublime Text 2 C .so 构建系统

python - 将列表转换为元组,然后将此元组添加到 python 列表中

php - 相当于 opencalais 的开源(最好是 PHP 或 Python?)

shared-libraries - Bada是否支持应用程序使用和创建动态链接库?

c# - 我如何在c#中使用c++ dll

c - "RTLD_NEXT used in code not dynamically loaded"请帮忙