如何使cython成为点子安装的必要条件?

时间:2019-04-09 18:19:49

标签: pip pypi

创建Python软件包并将其上传到pypi时,它将自动安装setup.pyinstall_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部分之前导入的,因此,当尝试通过pypicython下载的源(而不是通过轮子)安装此软件包时,它将失败由于无法导入pip,因此无法安装,因为尚未达到要求。

我想知道如何做才能确保pypi的{​​{1}}安装此软件包将在尝试导入之前安装cython。将requirements.txtcython一起添加似乎不会为从pypi下载的文件添加自动安装要求。

现在,我意识到可以将pip install cython放在pip install thispackage之前,但是我想知道是否有更好的修补程序可以直接从pypi来安装软件包和cython。当无法执行其他命令时(无需上载.c.文件并调整setup.py文件以使用它们而不是.pyx)。

1 个答案:

答案 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脚本之前安装到构建环境中。