在创建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
,但我想知道是否有一个更好的修复,允许直接从.c.
安装包和cython,因为它无法运行额外的命令(不需要上传setup.py
文件和调整.pyx
文件使用它们而不是PEP 518 -- Specifying Minimum Build System Requirements for Python Projects)。
你所描述的是“构建时间依赖”,这正是为“cython
”创建的用例。
您可以通过添加pyproject.toml
文件将[build-system]
requires = ["cython"]
指定为构建时依赖项,如:
pip
然后在使用现代版本的cython
(或其他兼容PEP 518的安装程序)安装软件包时,setup.py
将在运行qazxswpoi脚本之前安装到构建环境中。