gpt4 book ai didi

python - Cython 找不到共享对象文件

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:04 25 4
gpt4 key购买 nike

我正在尝试按照我在网上找到的说明从 Cython 链接到我自己的 C 库,包括这个答案:

Using Cython To Link Python To A Shared Library

我正在通过 Spyder 运行 IPython。

我的 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"

我可以确认它正在运行,因为如果我在 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.so 放在其他地方,看看 cython 是否能找到它:

  • 在Python运行的目录下
  • 在 Python 之路上
  • 与cython模块在同一个文件夹

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

我错过了什么吗?

最佳答案

我正在 self 回答,以防其他人遇到同样的问题。看起来答案在这里:

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 脚本中,或者将共享对象放在链接器搜索路径的某个位置。

有点痛,但就是这样。

关于python - Cython 找不到共享对象文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36827871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com