创建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
从 pypi
安装此软件包将安装 cython
在它尝试导入之前。添加 requirements.txt
与 cython
似乎没有为从 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/