在涉及Cython的setup.py中,如果是install_requires,那么如何从库中导入一些东西呢?

010*_*101 7 python pip cython setup.py

这对我来说没有意义.如何使用setup.py安装Cython,然后使用setup.py编译库代理?

import sys, imp, os, glob
from setuptools import setup
from Cython.Build import cythonize # this isn't installed yet

setup(
    name='mylib',
    version='1.0',
    package_dir={'mylib': 'mylib', 'mylib.tests': 'tests'},
    packages=['mylib', 'mylib.tests'],
    ext_modules = cythonize("mylib_proxy.pyx"), #how can we call cythonize here?
    install_requires=['cython'],
    test_suite='tests',
)
Run Code Online (Sandbox Code Playgroud)

后来:python setup.py构建

Traceback (most recent call last):
  File "setup.py", line 3, in <module>
    from Cython.Build import cythonize
ImportError: No module named Cython.Build
Run Code Online (Sandbox Code Playgroud)

这是因为尚未安装cython.

奇怪的是,很多项目都是用这种方式编写的.一个快速的github搜索显示:https://github.com/search? utf8 =% E2%9C%93&q = install_requires + cython&type = Code

s-m*_*m-e 11

据我了解,这就是PEP 518 的用武之地 - 另请参阅其作者之一的一些说明

这个想法是您将另一个文件添加到您的 Python 项目/包中:pyproject.toml. 它应该包含有关构建环境依赖项的信息(以及其他内容,长期)。pip(或任何其他包管理器)可以查看此文件,并在运行 setup.py(或任何其他构建脚本)之前安装所需的构建环境。pyproject.toml因此,A可能如下所示:

[build-system]
requires = ["setuptools", "wheel", "Cython"]
Run Code Online (Sandbox Code Playgroud)

这是一个相当新的发展,到目前为止(2019 年 1 月),它还没有最终确定/得到 Python 社区的批准,尽管(有限的)支持是在 2017 年 5 月/10.0 版本添加到 pip 的


Jon*_*ice 1

总体来说没有意义。正如您怀疑的那样,这是尝试使用(可能)尚未安装的东西。如果在已安装依赖项的系统上进行测试,您可能不会注意到此缺陷。但是在不存在依赖关系的系统上运行它,您肯定会注意到。

还有另一个setup()关键字参数 ,setup_requires它在形式上看起来是并行的,并且使用 to install_requires,但这是一种错觉。虽然在install_requires缺乏它所命名的依赖项的环境中触发自动安装的可爱芭蕾,但setup_requires更多的是文档而不是自动化。它不会自动安装,当然也不会神奇地及时跳回自动安装语句中已调用的模块import

setuptools 文档中有更多关于此内容的信息,但快速的答案是,您对尝试自动安装其自己的安装先决条件的模块感到困惑是正确的。

对于实际的解决方法,请尝试cython单独安装,然后运行此安装程序。虽然它不会修复此设置脚本的形而上学幻想,但它会解决要求并让您继续前进。