2012-02-25 68 views
1

具體而言,這是我遇到的情況:在zc.buildout中,如何安裝蛋A,然後安裝需要蛋A的蛋B才能正確安裝?

我正在使用zc.buildout來安裝需要pymssql的應用程序。 Pymssql需要Cython才能正確安裝。不過,我想不會改變我的運行環境,所以我想這樣做:

  1. 安裝用Cython
  2. 負載用Cython成擴建
  3. 安裝Pymssql。

我以爲Buildout已經這樣做了,但它看起來更像是檢查setup.cfg以確保安裝了必要的任何明確說明的東西。目前我的構建看起來像:

[buildout] 
    parts = required-eggs 
    ... 

[required-eggs] 
    eggs = Cython 
     pymssql 

Cython安裝正常。不幸的是pymssql不會:

return self.build_and_install(setup_script, setup_base) 
    File "/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1101, in build_and_install 
self.run_setup(setup_script, setup_base, args) 
    File "/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1090, in run_setup 
run_setup(setup_script, args) 
    File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 29, in run_setup 
lambda: execfile(
    File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 70, in run 
return func() 
    File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 31, in <lambda> 
{'__file__':setup_script, '__name__':'__main__'} 
    File "setup.py", line 41, in <module> 
ImportError: No module named Cython.Distutils 

因此,我認爲,用Cython安裝爲一個雞蛋,但沒有加載到運行擴建蟒蛇過程。在buildout中是否有一些配置可以讓我做到這一點?

回答

2

pymssql包alreade宣佈Cython卵爲setup_requires依賴項,但不會給distutils時間來安裝它。簡單地將它們列在setup_requires中,但仍然試圖在模塊範圍內導入它們(如pymssql所做的)是不夠的。

setup.py模塊將不得不加以調整,不導入Cython依賴,直到setup_requires行被解析並依賴所列已提供。基本上,它需要定義它自己的build_cmd類,該類在實例化時導入Cython依賴項並在該時間包裝該類,而不是之前。

這可能是因爲你可以創建一個使用Cython作爲依賴的自定義擴建食譜,然後可以安裝pymssql依賴與Cython通過擴建安裝在執行你的食譜,但就是這個傷口石膏是pymssql應處理,真的。

+0

謝謝你的回答,它可以幫助我更好地理解實際發生的事情!我想我只會包含一個預編譯好的pymssql並處理這些問題。 – DrakeAnderson 2012-02-28 01:30:19

相關問題