加载 cython 模块时出现无效的 ELF 标头问题

问题描述 投票:0回答:1

我尝试在 ML 模型推理期间在 python 中的 FastAPI 服务层上运行 cython 编译时优化。 我尝试在 FastAPI 服务器中加载 cython 编译 ML 模块,而不是为 ML 模型加载普通的 python 模块。

在 Mac OS Monterey(版本 12.5)上运行时加载 ML 模型时出现以下错误

遇到无效的 ELF 标头问题

用于编译python文件的命令

python setup.py build_ext --inplace

setup.py文件的内容

从 distutils.core 导入设置 从 Cython.Build 导入 cythonize 设置(ext_modules = cythonize('v2 / model.pyx','v2 / model_config.pyx','v2 / utils.pyx'), extra_compile_args=["-mmacosx-version-min=10.9","-stdlib=libc++"], extra_link_args=["-mmacosx-version-min=10.9","-stdlib=libc++"], )

我试图在Python代码中加载的文件 model.cpython-310-darwin.so

如有任何帮助,我们将不胜感激

  1. 我在普通 Mac 笔记本电脑(没有 M1 芯片)上尝试过,遇到了同样的问题。
  2. 另外,尝试根据 Mac 版本更改 -mmacosx-version-min=10.9 设置,这对我没有帮助。
python optimization fastapi cython
1个回答
0
投票

如果您尝试加载/编译共享对象文件,您可能需要在安装文件的库参数中指定它。例如,如果我有一个名为

libcalg.so
的文件并且想要动态链接我的 cython 代码,那么您需要这样的东西。

ext_modules = cythonize([
Extension(
    "queue", 
    sources=["queue.pyx"],
    libraries=["calg"]) # would be libcalg.so somewhere in usr/local/lib
])

通常共享对象文件以

l
为前缀,因此 C/C++ 知道在
usr/local/lib
目录中的何处查找它。如果您只是尝试使用该
model.cpython-310-darwin.so
中的功能,则需要动态链接它。希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.