簡體   English   中英

構建 - 使用不同的 python 版本

[英]buildout - using different python version

我已經建立了必須在舊機器上運行的 buildout 項目(具體是 django),它在我的本地系統中使用 python 2.7 運行良好。

在生產服務器中,它運行 python 2.5,我想配置它會下載和使用 2.6 的構建,但只有這個項目不是系統范圍的。

所以我認為它應該使用某種配方,但是女巫以及如何使用? 我找不到一個。 我希望只使用buildout.cfg文件來實現它..

Buildout 專門支持這種情況。 構建中的每個部分都可以使用它自己的 Python 解釋器,或者您可以為所有部分全局設置一個 Python 解釋器。 這默認為用於運行 buildout 的 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 腳本符號鏈接到 buildout bin/目錄中; 以下部分將為您做到這一點:

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

無論您使用哪種 python 運行初始 bootstrap.py,都將用於整個項目。 所有路徑都將引用該特定 python 並且將使用該特定 python 的站點包。

這是關於構建的最好的事情之一

這是一個 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/。

然后執行您的實際 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',

接受的答案說您需要編譯整個python。 不需要也不建議這樣做,盡管這意味着您有一個完全隔離的站點包。 但是有更簡單的方法可以告訴 buildout 不包含站點包。

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

Martijn Pieters 的回答似乎對我沒有幫助。 我需要在構建腳本中使用不同版本的 python。 這是我的例子

[buildout]
parts = py2script
        py3script
index = https://pypi.python.org/simple

[python36]
executable = /usr/bin/python3.6
[python27]
executable = /usr/bin/python2.7

[py3script]
recipe = zc.recipe.egg:scripts
python = python36
eggs = bobo
interpreter = python3_interpreter

[py2script]
recipe = zc.recipe.egg:scripts
python = python27
eggs = bobo
interpreter = python2_interpreter

每次在 python(2|3)_interpreter 腳本中都會寫入我用於引導的 python 版本。 所以我的 buildout.cfg 似乎沒有按預期工作。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM