创建Python软件包并将其上传到pypi
时,它将自动安装setup.py
下install_requires
文件中的要求,例如
from distutils.core import setup
setup(
name = 'a_package',
packages = ['a_package'],
install_requires=['another_package']
)
当程序包具有cython扩展名(并且.pyx
/ .c
文件而不是.cpp
/ setup.py
文件)时,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_subclass},
ext_modules = [Extension('the_extension', sources=[`a_file.pyx`])]
)
文件将需要导入cython来创建可安装文件扩展名,例如
setup
但是由于Cython是在执行pip
部分之前导入的,因此,当尝试通过pypi
从cython
下载的源(而不是通过轮子)安装此软件包时,它将失败由于无法导入pip
,因此无法安装,因为尚未达到要求。
我想知道如何做才能确保pypi
的{{1}}安装此软件包将在尝试导入之前安装cython
。将requirements.txt
与cython
一起添加似乎不会为从pypi
下载的文件添加自动安装要求。
现在,我意识到可以将pip install cython
放在pip install thispackage
之前,但是我想知道是否有更好的修补程序可以直接从pypi
来安装软件包和cython。当无法执行其他命令时(无需上载.c.
文件并调整setup.py
文件以使用它们而不是.pyx
)。
答案 0 :(得分:1)
您所描述的是“构建时间依赖性”,而这恰恰是创建了用例“ PEP 518 -- Specifying Minimum Build System Requirements for Python Projects”。
您可以通过添加cython
文件来将pyproject.toml
指定为构建时依赖项,例如:
[build-system]
requires = ["cython"]
然后,当使用现代版本的pip
(或另一个PEP 518兼容安装程序)安装软件包时,cython
将在运行setup.py
脚本之前安装到构建环境中。