2016-04-24 38 views
3

我想链接到由用Cython我自己的C库,下面我在网上找到了方向,其中包括这样的回答:用Cython无法找到共享对象文件

Using Cython To Link Python To A Shared Library

我运行IPython通过Spyder。

我setup.py看起来是这样的:

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Build import cythonize 
import numpy as np 

setup(
    ext_modules = cythonize(
     [Extension("*",["*.pyx"], 
       libraries =["MyLib"], 
       extra_compile_args = ["-fopenmp","-O3"], 
       extra_link_args=["-L/path/to/lib"]) 
       ]), 
    include_dirs = [np.get_include()], 
) 

文件libMyLib.so/path/to/lib,它编译罚款。

我,做我的IPython配置文件的启动文件夹中有一个Python脚本这个

try: 
    os.environ["LD_LIBRARY_PATH"] += ":/path/to/lib" 
except KeyError: 
    os.environ["LD_LIBRARY_PATH"] = "/path/to/lib" 

我可以证实,这是跑步,因为如果我输入os.environ["LD_LIBRARY_PATH"]到IPython的解释,它返回/path/to/lib

但是,当我尝试加载用Cython模块(即import mycythonmodule)我得到:

ImportError: libMyLib.so: cannot open shared object file: No such file or directory 

我也TR灭蝇灯将libMyLib.so在其他地方看到的,如果用Cython会发现:

  • 在目录中的Python运行
  • 在Python路径
  • 在相同的文件夹用Cython模块

但它仍然没有找到共享库。我可以通过将它放入/usr/lib,但我不希望它在那里,我希望能够设置库路径。

我错过了什么吗?

回答

3

我自我回答,以防其他人遇到同样的问题。貌似答案在这里:

Set LD_LIBRARY_PATH before importing in python

Changing LD_LIBRARY_PATH at runtime for ctypes

根据这些答案(和我的经验),蟒蛇时启动,因此从内Python没有改变它的链接器读取LD_LIBRARY_PATH任何有用的效果,至少不是我所期待的效果。唯一的解决方案是将python包装在设置LD_LIBRARY_PATH的shell脚本中,或者将共享对象放在链接器搜索路径的某处。

有点痛,但它是什么。

相关问题