如何使cython成为pip安装的需求?
创建Python包并将其上载到如何使cython成为pip安装的需求?,pip,pypi,Pip,Pypi,创建Python包并将其上载到pypi时,它将自动安装放入install\u requires下的setup.py文件中的需求,例如 from distutils.core import setup setup( name = 'a_package', packages = ['a_package'], install_requires=['another_package'] ) 当软件包具有cython扩展名(和.pyx文件而不是.c/.cpp文件)时,setup.py文件将需要
pypi
时,它将自动安装放入install\u requires
下的setup.py
文件中的需求,例如
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是在执行设置
部分之前导入的,因此当尝试通过pip
从pypi
下载的源代码(而不是从控制盘)安装此软件包时,由于无法导入Cython
,它将无法安装,因为它还没有达到要求的部分
我想知道如何确保从pypi
安装此软件包的pip
在尝试导入之前安装cython
。添加带有cython的requirements.txt
似乎不会为从pypi
下载的文件添加自动安装要求
现在,我意识到可以在
pip安装这个包之前pip安装cython
,但我想知道是否有更好的修复方法,可以在无法运行其他命令时,直接从pypi
安装cython包(无需上传.c.
文件并调整setup.py
文件以使用它们而不是.pyx
)。您所描述的是“构建时依赖关系”,而这正是创建该用例的目的
通过添加pyproject.toml
文件,可以将cython
指定为构建时依赖项,如:
[build-system]
requires = ["cython"]
然后,在使用现代版的pip
(或其他兼容PEP 518的安装程序)安装软件包时,在运行setup.py
脚本之前,cython
将被安装到构建环境中。我看到,默认情况下,该文件没有包含在包中,而使用python setup.py sdist
-是否需要将其添加到清单中。
或者它对set生成的包文件有影响uptools
或distutils
?您还需要在setup.py
文件中使用setuptools
。尚未(很可能不会)将PEP 518支持添加到distutils
。