2011-04-20 94 views
6

我已成立項目擴建(Django的是具體的),有在老機器上運行,它工作在我的本地系統具有優良的python 2.7。擴建 - 使用不同的Python版本

在生產服務器上運行的Python 2.5,我想配置擴建,它會下載並使用2.6,但僅此項目不繫統範圍。

所以我想它應該使用某種形式的配方,但女​​巫又如何呢?我找不到一個。我希望只使用buildout.cfg文件來實現它。

回答

8

堆積物特別支持這種情況。在擴建每一部分都可以用它自己的Python解釋器,也可以爲所有部件全局設置一個Python解釋器。這默認爲用於運行構建的python。

要設置使用的python解釋器,請將python選項設置爲包含executable選項的零件的名稱。這可以是構建一個全新的python解釋器的一部分。以下是一個示例:

[buildout] 
python = python 
parts = 
    python 

[python] 
recipe = zc.recipe.cmmi 
url = http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz 
executable = ${buildout:directory}/parts/python/bin/python2.6 
extra_options= 
    --enable-unicode=ucs4 
    --with-threads 
    --with-readline 

此構建中的任何其他部分現在將使用python 2.6可執行文件。

您可能希望將python腳本符號鏈接到構建bin/目錄中;以下部分將爲您執行此操作:

[pythonbin] 
recipe = plone.recipe.command 
command = ln -s ${python:executable} ${buildout:bin-directory}/python 
+0

對不起,但它與我的更新有什麼不同?它對我有何幫助?似乎我通過了這部分。感謝幫助! – JackLeo 2011-04-20 07:48:07

+0

我在編輯你的問題之前寫了這個答案。我無法回答正在改寫的問題,現在,我可以嗎? ;-) – 2011-04-20 07:49:44

+0

不,謝謝你的努力。 :-) – JackLeo 2011-04-20 07:50:50

-2

通常每個buildout項目都包含一個bootstrap.py腳本,最初使用您需要用於此項目的Python解釋器運行 。運行bootstrap.py 將在本地創建/安裝擴建和所有的東西你需要的。典型的使用模式是:

svn checkout <some_url_of_a_buildout_project> 
cd my_project 
/path/to/my/python bootstrap.py 
bin/buildout 
+0

'通常每擴建項目包含與最初使用需要/想這個project.' Python解釋器運行bootstrap.py腳本 - 你的意思是,如果我會用下命令2.6 2.5安裝在OS中的python會自動爲項目2.6下載和使用?它不是'如何使用buildout'問題。它的'如何配置它?' – JackLeo 2011-04-20 06:32:29

+0

什麼是「2.6命令」? – 2011-04-20 07:26:08

+0

蟒蛇2.6庫/命令等 – JackLeo 2011-04-20 07:27:50

2

無論您使用哪種python運行初始bootstrap.py,它都將用於整個項目。所有的路徑將引用特定Python和用於該特定蟒sitepackages將被使用。

這是一個約擴建的最好的事情

這是一個32位的Python 2.6之一:

/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6 boostrap.py 

這是一個64位的Python 2.7:

/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python bootstrap.py 

現在去看看在垃圾箱/它創建。

然後執行您的實際bin/buildout -c dev.cfg並查看bin中的腳本。對於我的32位例如:

對於第一個我在Django的文件中看到:

#!/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python 
... 
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages', 

接受的答案說,你需要編譯一個整體蟒蛇。這並不需要也不建議,儘管這意味着您擁有完全隔離的網站包。但是有更簡單的方法可以告訴buildout不包含網站包。

esaelPsnoroMoN的答案實際上是正確的,但他/他沒有很好地描述解決方案。(我以前忽略了它自己)