【发布时间】:2019-08-31 02:37:38
【问题描述】:
创建Python包并上传到pypi时,会自动安装install_requires下setup.py文件中的需求,例如
from distutils.core import setup
setup(
name = 'a_package',
packages = ['a_package'],
install_requires=['another_package']
)
当包具有 cython 扩展名(和 .pyx 文件而不是 .c/.cpp 文件)时,setup.py 文件将需要导入 cython 以创建可安装的扩展名,例如
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
name = 'a_package',
packages = ['a_package'],
install_requires=['another_package'],
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension('the_extension', sources=['a_file.pyx'])]
)
但是由于 Cython 是在执行 setup 部分之前导入的,当尝试从 pypi 下载的源(而不是从轮子)通过 pip 安装此软件包时,由于未安装而无法安装可以导入cython,因为还没有达到要求的部分。
我想知道如何确保从pypi 安装此软件包的pip 将在尝试导入之前安装cython。添加requirements.txt 和cython 似乎不会为从pypi 下载的文件添加自动安装要求。
现在,我意识到可以在 pip install thispackage 之前只使用 pip install cython,但我想知道是否有更好的修复方法可以在无法运行时直接从 pypi 安装包和 cython附加命令(无需上传.c. 文件并调整setup.py 文件以使用它们而不是.pyx)。
【问题讨论】: