我有一个包需要Cython来构建其扩展,我正在尝试调整setup.py
文件以简化安装。
一个简单的
pip install git+git://<pkg-repo>
抛出错误
$ pip install git+https://<pkg-repo>
Downloading/unpacking git+https://<pkg-repo>
Cloning https://<pkg-repo> to /tmp/pip-nFKHOM-build
Running setup.py (path:/tmp/pip-nFKHOM-build/setup.py) egg_info for package from git+https://<pkg-repo>
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/tmp/pip-nFKHOM-build/setup.py", line 2, in <module>
from Cython.Build import cythonize
ImportError: No module named Cython.Build
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/tmp/pip-nFKHOM-build/setup.py", line 2, in <module>
from Cython.Build import cythonize
ImportError: No module named Cython.Build
因为在安装Cython依赖项之前进行了Cython导入。这导致了多阶段安装过程:
pip install <deps> cython
pip install git+git://<pkg-repo>
哪个很糟糕。 setup.py
的相关部分是:
from setuptools import setup, find_packages
from Cython.Build import cythonize
setup(
install_requires=[
...
'cython>=0.19.1'
...
],
ext_modules=cythonize([
...
"pkg/io/const.pyx",
...
])
)
如何在依赖setup.py
获取Cython的同时,将install_requires
更改为仍然对ext_modules进行cython化?
答案 0 :(得分:3)
从版本18.0开始,setuptools支持Cython:你可以在setup_requires中指定cython版本并在Extension中列出所需的源代码,setuptools将确保使用Cython构建它们并在需要时安装它 - 没有必要明确从您的setup.py。中调用cythonize()
。
你的setup.py看起来像这样:
from setuptools import setup, Extension
setup(
setup_requires=[
...
'setuptools>=18.0',
'cython>=0.19.1',
...
],
ext_modules=Extension([
...
"pkg/io/const.pyx",
...
])
)
我在这个SO答案中提到它之前我也不知道这个功能:https://stackoverflow.com/a/38057196/1509394。