2011-11-09 41 views
5

我在构建中面临着与cython相关的问题。与Cython构建部分构建

其中一个部分是一个模块从.c文件和.pyx文件与cython构建。

我已经尝试了很多解决方案:

但所有错误结束:

ImportError: No module named Cython.Distutils

这追加扩建时加载0123这个cython模块的。

请注意,setup.py在从其自己的目录中调用并且在buildout bin目录中具有解释器时可以使用。

感谢您的帮助。

+0

你确定Cython安装正确吗?你已经设置了'PYTHONPATH'环境变量来包含Cython模块所在的目录? –

+0

您的意思是在系统级别?这将使这个构建不可能被部署在没有cython的系统上......? –

+0

“系统级”是什么意思? –

回答

4

您链接的文章告诉您如何从构建中安装Cython,但要做到这一点,您需要对site-packages文件夹进行写入访问。有3种方法,你应该能够运行这些网络建设:

  1. root权限运行它,并安装用Cython到系统Python的 站点包。通常你想避免这样做。

  2. 编译自己的Python。如果您想要 使用尚未在系统上的Python版本,则这可能是唯一选项。有 扩展配置,可让您从build中构建任何版本的 Python。使用virtualenv。这将创建(在buildout文件夹中)一个包含您自己的 site-packages文件夹的完整Python虚拟环境。这通常是运行 构建的最佳方式,该构建可以使用系统Python(或者已经安装在系统范围内的任何其他Python,即 )。

我建议你使用virtualenv作为你软件的安装说明的一部分。

+0

谢谢你的提议,我会这样开。 –

1

没有办法做到这一步,但作为一个两步过程很容易。

用途:

python bootstrap.py 
./bin/buildout install cython 
./bin/cpy bootstrap.py 
./bin/cpy ./bin/buildout 

的原因,这可能是因为扩建支持一个不起眼的选项“安装”,这没有人挂在嘴边,但你可以使用它,像这样:

[buildout] 
parts = deps py # <---- Notice we don't depend on cython here 
eggs = 
    whatever 
    kdist 
    nark 
    kivy # <--- But we do have a module that requires cython to build 
develop = 
    . 
    lib/nark 
    lib/kivy-dist 

[cython] # <---- By calling ./bin/buildout install cython we trigger this 
recipe = zc.recipe.egg:script 
parts = cython-py 
interpreter = cpy # <--- Which makes our dummy ./bin/cpy 
eggs = 
    cython 
    pyinstaller 

[deps] 
recipe = zc.recipe.egg:eggs 
eggs = ${buildout:eggs} 

[py] 
recipe = zc.recipe.egg:script 
interpreter = py 
eggs = ${buildout:eggs} 

关于这种方法的可爱的事情是,第二次运行构建清除bin目录所以在一天结束时,你留下一个bin目录,该目录是l ooks这样的:

$ ls bin/ 
buildout garden py 

没有剩余的包,可能会或可能不会流连在你的virtualenv,后来搞砸。那为什么我们在第一个地方使用buildout?

......当然,如果你想让cython四处游走,juts会将它粘贴到顶层的依赖项中。

+0

所以很酷并不知道那个参数,它是我正在寻找的缺失部分(在运行构建时不总是重建所有部件)。格拉西亚斯! –

2

我今天发现这个配方 https://pypi.python.org/pypi/mr.cython/1.0 它解决了这个问题。

这解决通过用一种推广配方安装用Cython该问题,以便它是可用时附加件运行setup.py develop

问题是要建立一个用Cython模块而无需安装系统级用Cython。

+0

答案对我来说很好。 OP正在用相关的解决方案和背景回答他自己的问题。 –

+0

在原始问题提供答案后的几年,OP回来的事实非常符合StackOverflow的精神,值得赞赏。查看相关的XKCD:https://xkcd.com/979/ –

+0

@HåkenLid:说的好,我也赞成。 @ OP:你也可以接受你的回答:-) –