Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使cython成为pip安装的需求?_Pip_Pypi - Fatal编程技术网

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

如何使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文件将需要

创建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
文件将需要导入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