在pip包构建上编译Cython

2024-09-22 10:22:05 发布

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

我正在开发一个Python包,EcoPy,它主要是用纯Python编写的。主文件夹名为ecopy。有一个名为“回归”的子文件夹,其中有一个已经生成的Cython文件。主要设置.py文件包含以下代码:

ext_modules = cythonize([
    Extension(
        'ecopy.regression.isoFunc', ['ecopy/regression/isoFunc.pyx'], **opts),
])

当我跑的时候

^{pr2}$

模块构建良好。如果我删除了isoFunc.c文件,它甚至会重新编译它。问题是Cython没有把.c文件转换成.so文件,我需要这个文件来导入函数。如果我试着在没有它的情况下加载模块

ImportError: No module named isoFunc

如果我使用命令行手动设置文件

python setup.py build_ext --inplace

Cython确实生成了.so文件。如何让它使用pip生成.so文件?我曾试图通过阅读statsmodels的代码来了解它们是如何做到的,但老实说,这对我来说是个谜。在

这就好像pip命令错过了build\u ext参数。在


Tags: 模块pip文件代码pybuild文件夹modules
2条回答

我能回答这个问题,因为我才知道我是个白痴。在

sudo pip install ecopy -e .  upgrade  force-reinstall

使用的是PyPI中没有新版本的旧版本设置.py用赛顿密码。当我做对了

^{pr2}$

在我的硬盘上使用了最新的版本,效果很好。在

小小的胜利。在

我来这里是因为我不确定pip安装我的包是否足以自动编译Cython源代码。看起来是这样,但默认情况下,pip输出似乎没有记录这一点。我注意到,pip install -e . -v非常清楚地说明了编译和链接步骤是否/具体执行了哪些操作:

Running setup.py develop for mypackage
  [...]
  running build_ext
  cythoning mypackage/my_cython_module.pyx to mypackage/my_cython_module.c
  building 'mypackage.my_cython_module' extension
  x86_64-linux-gnu-gcc [...] -c mypackage/my_cython_module.c -o build/temp.linux-x86_64-2.7/mypackage/my_cython_module.o
  x86_64-linux-gnu-gcc [...] build/temp.linux-x86_64-2.7/mypackage/my_cython_module.o -o build/lib.linux-x86_64-2.7/mypackage/my_cython_module.so
  copying build/lib.linux-x86_64-2.7/mypackage/my_cython_module.so -> mypackage
  [...]

相关问题 更多 >