使用Cython构建部件

时间:2011-11-09 10:35:48

标签: python cython buildout

我在buildout中面临cython的问题。

其中一个部分是使用来自.c文件和.pyx文件的cython的模块构建。

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

但所有结果都有错误:

ImportError: No module named Cython.Distutils

当buildout加载此cython模块的setup.py时,这会附加。

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

您链接的文章告诉您如何从buildout安装Cython,但要做到这一点,您需要对site-packages文件夹的写入权限。您应该有3种方法来运行这些扩建:

  1. 以root身份运行并将Cython安装到系统python中 站点包。通常你想避免这样做。

  2. 编译自己的Python。如果您愿意,这可能是唯一的选择 使用系统中尚未安装的Python版本。有 buildout配置,可以让你构建任何版本的 来自buildout内部的Python。

  3. 使用virtualenv。这将创建(在buildout文件夹中)a 完整的Python虚拟环境,包括您自己的 site-packages文件夹。这通常是运行a的最佳方式 可以使用系统Python(或任何其他Python)的buildout 你已经安装了系统范围。)

  4. 我建议您使用virtualenv部分软件安装说明。

答案 1 :(得分:2)

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

这可以通过安装带有扩展配方的cython解决问题,以便在buildout运行时可用setup.py develop

问题是在没有安装cython作为系统级别的情况下构建cython模块。

答案 2 :(得分:1)

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

使用:

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

这是可能的原因是因为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}

关于这种方法的可爱之处是第二次运行buildout 清除bin目录所以在一天结束时,你留下了一个看起来像这样的bin目录:

$ ls bin/
buildout garden   py

没有剩余的软件包可能会或可能不会在你的virtualenv中徘徊,并在以后搞砸了。这就是为什么我们首先使用buildout吧?

...当然,如果你想让cython闲逛,juts也会把它粘在顶部的依赖关系中。