在pip软件包构建中编译Cython

Nat*_*ate 5 python pip cython

我正在开发一个Python软件包EcoPy,该软件包主要是用纯Python编写的。主文件夹称为ecopy。有一个名为Regress的子文件夹,其中有一个已经建立的Cython文件。setup.py主文件包含以下代码:

ext_modules = cythonize([
    Extension(
        'ecopy.regression.isoFunc', ['ecopy/regression/isoFunc.pyx'], **opts),
])
Run Code Online (Sandbox Code Playgroud)

当我跑步

sudo pip install ecopy -e . --upgrade --force-reinstall
Run Code Online (Sandbox Code Playgroud)

该模块构建良好。如果我删除了它,它甚至会重新编译isoFunc.c文件。问题在于,Cython不会将.c文件转换为.so文件,而导入该功能需要该文件。如果我尝试在没有模块的情况下加载模块,则会得到

ImportError: No module named isoFunc
Run Code Online (Sandbox Code Playgroud)

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

python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

Cython会生成.so文件。如何使用pip生成.so文件?我试图通过阅读他们的代码来弄清楚statsmodels是如何做到的,但是老实说,这对我来说是个谜。

pip命令几乎错过了build_ext参数。

Nat*_*ate 6

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

sudo pip install ecopy -e . --upgrade --force-reinstall
Run Code Online (Sandbox Code Playgroud)

正在使用 PyPI 中的旧版本,该版本没有带有 Cython 代码的新 setup.py。当我做对了

sudo pip install -e . --upgrade --force-reinstall
Run Code Online (Sandbox Code Playgroud)

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

小胜。