gpt4 book ai didi

python - 使用 setuptools 创建调用外部 C 库的 cython 包

转载 作者:IT老高 更新时间:2023-10-28 21:01:55 28 4
gpt4 key购买 nike

我正在尝试编译、安装和运行一个我们将称为 myPackage 的包。它包含一个 *.pyx 文件,该文件调用库 fftw 中的函数 fftw_set_timelimit()。目前,当我运行导入包的脚本 clientScript.py 时,我收到以下错误消息:

Traceback (most recent call last):
File "clientScript.py", line 5, in <module>
import myPackage.myModule
ImportError: /usr/local/lib/python2.7/dist-packages/myPackage/myModule.so: undefined symbol: fftw_set_timelimit

据我了解(我对 python 和 cython 很陌生),与 C 库的链接尚未在我的包中执行。事实上,我的 setup.py 文件看起来像这样:

from setuptools   import setup,find_packages
from Cython.Build import cythonize
import os

setup(
name = "myPackage",
version = "0.0.1",
url = "none",
author = "me",
author_email = "me@me.me",
packages=find_packages(),
ext_modules = cythonize("pyClo/pyClo.pyx"),
)

如您所见,我的 setup.py 文件使用 setuptools。我决定这样做是因为 Python Packaging User Guide 推荐了它。 .但是,Cython documentation 中的说明改用 distutils。链接库是通过调用 distutils.Extension('file',['file.pyx'],libraries='fftw') 完成的。如何使用 setuptools 获得相同的结果?

最佳答案

原来 setuptools 有一个模块 setuptools.extension.Extension 其使用方式与 distutils.extension.Extension 相同模块。

最后,setup.py 文件看起来像:

from setuptools import setup, find_packages
from setuptools.extension import Extension
from Cython.Build import cythonize

extensions = [
Extension(
"myPackage.myModule",
["myPackage/myModule.pyx"],
include_dirs=['/some/path/to/include/'], # not needed for fftw unless it is installed in an unusual place
libraries=['fftw3', 'fftw3f', 'fftw3l', 'fftw3_threads', 'fftw3f_threads', 'fftw3l_threads'],
library_dirs=['/some/path/to/include/'], # not needed for fftw unless it is installed in an unusual place
),
]

setup(
name = "myPackage",
packages = find_packages(),
ext_modules = cythonize(extensions)
)

这是我的安装目录的概述:

.
├── MANIFEST.in
├── myPackage
│   └── myModule.pyx
├── README.rst
└── setup.py

其中 myModule.pyx 是调用 fftw_set_timelimit() 的文件。

MANIFEST.in 包含:

include myPackage/*.*

README.rst 只是一个纯文本文件。

关于python - 使用 setuptools 创建调用外部 C 库的 cython 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32528560/

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