2011-11-09 77 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:你也可以接受你的回答:-) –