pip - 如何使 cython 成为 pip 安装的要求?

标签 pip pypi

创建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导致安装失败,因为它还没有达到要求的部分。

我想知道可以做些什么来确保 pippypi 安装此软件包将安装 cython在它尝试导入之前。添加 requirements.txtcython似乎没有为从 pypi 下载的文件添加自动安装要求.

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

最佳答案

您所描述的是“构建时间依赖项”,而这正是为“PEP 518 -- Specifying Minimum Build System Requirements for Python Projects”创建的用例。

您可以指定 cython通过添加 pyproject.toml 作为构建时依赖项文件如:

[build-system]
requires = ["cython"]

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

关于pip - 如何使 cython 成为 pip 安装的要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55598951/

相关文章:

django - Python (Django) 项目的依赖安装

python - `pip freeze` 包安装中断

python - PyPI 如何确定包的最新版本是什么?

python - pypi - 服务器响应 (503) : backend read error

python - 运行 setup.py 时以 '\xff' 开头的非 UTF-8 代码

python - 如何使用pip和PyPI安装Python模块单文件?

python - Tensorflow 的多个版本导致问题

python - 让 Fabric Python 库工作

python - 没有名为 'Twisted' 的模块

python - 用于安装 PyPi 的 Helm 图表?