Cython找不到共享对象fi

2024-05-29 03:21:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从Cython链接到我自己的C库,按照我在网上找到的指导,包括这个答案:

Using Cython To Link Python To A Shared Library

我要通过Spyder来管理IPython。在

我的设置.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脚本可以执行此操作

^{pr2}$

我可以确认它正在运行,因为如果我在IPython解释器中输入os.environ["LD_LIBRARY_PATH"],它将返回/path/to/lib

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

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

我也试过libMyLib.所以在其他地方看看cython会不会找到它:

  • 在运行Python的目录中
  • 在Python路径上
  • 在和cython模块相同的文件夹中

但它仍然找不到共享库。我能让它找到库的唯一方法是把它放到/usr/lib中,但我不希望它在那里,我希望能够设置库路径。在

我错过什么了吗?在


Tags: topathfromimportlibipythonnpsetup
1条回答
网友
1楼 · 发布于 2024-05-29 03:21:19

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

Set LD_LIBRARY_PATH before importing in python

Changing LD_LIBRARY_PATH at runtime for ctypes

根据这些答案(以及我的经验),当python启动时,链接器读取LD_LIBRARY_PATH,因此从python内部更改它没有任何有用的效果,至少不是我希望的效果。唯一的解决方案是将python包装在一个设置LD_LIBRARY_PATH的shell脚本中,或者将共享对象放到链接器搜索路径的某个地方。在

有点痛苦,但这就是事实。在

相关问题 更多 >

    热门问题