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 的。
总体来说没有意义。正如您怀疑的那样,这是尝试使用(可能)尚未安装的东西。如果在已安装依赖项的系统上进行测试,您可能不会注意到此缺陷。但是在不存在依赖关系的系统上运行它,您肯定会注意到。
还有另一个setup()
关键字参数 ,setup_requires
它在形式上看起来是并行的,并且使用 to install_requires
,但这是一种错觉。虽然在install_requires
缺乏它所命名的依赖项的环境中触发自动安装的可爱芭蕾,但setup_requires
更多的是文档而不是自动化。它不会自动安装,当然也不会神奇地及时跳回自动安装语句中已调用的模块import
。
setuptools 文档中有更多关于此内容的信息,但快速的答案是,您对尝试自动安装其自己的安装先决条件的模块感到困惑是正确的。
对于实际的解决方法,请尝试cython
单独安装,然后运行此安装程序。虽然它不会修复此设置脚本的形而上学幻想,但它会解决要求并让您继续前进。
归档时间: |
|
查看次数: |
663 次 |
最近记录: |