Python 在pip包构建中编译Cython

Python 在pip包构建中编译Cython,python,pip,cython,Python,Pip,Cython,我正在开发一个Python包,它主要是用纯Python编写的。主文件夹称为ecopy。有一个名为“回归”的子文件夹,其中有一个已经生成的Cython文件。主setup.py文件包括以下代码: ext_modules = cythonize([ Extension( 'ecopy.regression.isoFunc', ['ecopy/regression/isoFunc.pyx'], **opts), ]) 当我跑的时候 sudo pip install ecopy

我正在开发一个Python包,它主要是用纯Python编写的。主文件夹称为ecopy。有一个名为“回归”的子文件夹,其中有一个已经生成的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\u ext参数一样。

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

sudo pip install ecopy -e . --upgrade --force-reinstall
使用的是PyPI中的旧版本,没有Cython代码的新setup.py。当我做对的时候

sudo pip install -e . --upgrade --force-reinstall
并且在我的硬盘上使用了最新版本,它运行良好


小胜利。

我来这里是因为我不确定pip安装我的包是否足以自动编译Cython源代码。看起来是这样,但默认情况下,pip输出似乎不会记录这一点。我注意到
pip安装-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
  [...]