buildout - 使用不同的python版本

时间:2011-04-20 06:21:32

标签: python version buildout

我已经设置了必须在旧机器上运行的buildout项目(django具体),它在我的本地系统中使用python 2.7正常工作。

在生产服务器中,它运行python 2.5,我想配置它将下载并使用2.6的buildout,但只有这个项目不是系统范围的。

所以我认为它应该使用某种食谱,但女巫和如何?我找不到一个。我希望只使用buildout.cfg文件来实现它。

4 个答案:

答案 0 :(得分:8)

Buildout特别支持此方案。 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

此buildout中的任何其他部分现在将使用python 2.6可执行文件。

您可能希望将python脚本符号链接到buildout bin/目录中;以下部分将为您做到这一点:

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

答案 1 :(得分:4)

无论你使用哪个python运行初始bootstrap.py都将用于整个项目。所有路径都将引用该特定python,并将使用该特定python的sitepackages。

这是关于buildout的最好的事情之一

这是一个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不包含sitepackages。

esaelPsnoroMoN的答案实际上是正确的,但他/她并没有很好地描述解决方案。 (我之前自己忽略了它)

答案 2 :(得分:0)

Martijn Pieters的回答似乎没有帮助我。我需要在buildout脚本中使用不同版本的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脚本,这些脚本将用于bootstraping。所以我的buildout.cfg似乎没有按预期工作。

答案 3 :(得分:-2)

通常每个buildout项目都包含一个最初运行的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