python - 在 pip 包构建上编译 Cython

标签 python pip cython

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

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

当我运行时

sudo pip install ecopy -e . --upgrade --force-reinstall

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

ImportError: No module named isoFunc

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

python setup.py build_ext --inplace

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

就好像 pip 命令遗漏了 build_ext 参数。

最佳答案

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

sudo pip install ecopy -e . --upgrade --force-reinstall

使用的是 PyPI 的旧版本,它没有新的 setup.py 和 Cython 代码。当我做对了

sudo pip install -e . --upgrade --force-reinstall

并在我的硬盘上使用了最新版本,它运行良好。

小小的胜利。

关于python - 在 pip 包构建上编译 Cython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846270/

相关文章:

python - Core ML 模型转换失败,返回 "Unable to infer input name and dimensions"

python - Pandas:有条件的 2 列的累积和

python-3.x - ImportError : Missing optional dependency 'S3Fs' . 处理 S3 文件需要 S3Fs 包。使用 pip 或 conda 安装 S3Fs

python - 无法在 ubuntu 16.04 中使用 pip3

python - 导入错误 : cannot import name 'InvalidSchemeCombination' from 'pip._internal.exceptions'

Cython 相当于 c 定义 #define myfunc(node x,...) SetNode(x.getattributeNode(),__VA_ARGS__)

python - cython char array[] convert 中的 c++ header wrapper 声明

python - 如何将返回的 Python 字典转换为 C++ std::map<string, string>

python - Cython 中的空字符问题

python - 如何在 Kivy 中获得更新时间