如何让cython成为pip安装的必需品?

问题描述 投票:2回答:1

在创建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文件将需要导入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部分之前导入的,所以当尝试通过从pip下载的源(而不是从轮子)通过pypi安装此包时,由于无法导入cython而无法安装,因为它没有达到了要求的部分。

我想知道可以做些什么来确保从pip安装pypicython将在尝试导入之前安装requirements.txt。使用cython添加pypi似乎不会为从pip install cython下载的文件添加自动安装要求。

现在,我意识到在pip install thispackage之前可能只有pypi,但我想知道是否有一个更好的修复,允许直接从.c.安装包和cython,因为它无法运行额外的命令(不需要上传setup.py文件和调整.pyx文件使用它们而不是PEP 518 -- Specifying Minimum Build System Requirements for Python Projects)。

pip pypi
1个回答
1
投票

你所描述的是“构建时间依赖”,这正是为“cython”创建的用例。

您可以通过添加pyproject.toml文件将[build-system] requires = ["cython"] 指定为构建时依赖项,如:

pip

然后在使用现代版本的cython(或其他兼容PEP 518的安装程序)安装软件包时,setup.py将在运行qazxswpoi脚本之前安装到构建环境中。

© www.soinside.com 2019 - 2024. All rights reserved.