6

我已经设置了必须在旧机器上运行的构建项目(具体来说是 django),它在我的本地系统中使用 python 2.7 运行良好。

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

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

4

4 回答 4

8

Buildout 专门支持这种情况。buildout 中的每个部分都可以使用它自己的 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 脚本符号链接到 buildoutbin/目录中;以下部分将为您做到这一点:

[pythonbin]
recipe = plone.recipe.command
command = ln -s ${python:executable} ${buildout:bin-directory}/python
于 2011-04-20T07:42:45.803 回答
4

无论您使用哪种 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 的答案实际上是正确的,但他/她没有很好地描述解决方案。(我之前自己忽略了)

于 2012-12-12T12:39:54.030 回答
0

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 似乎没有按预期工作。

于 2018-03-28T13:41:57.113 回答
-2

通常每个构建项目都包含一个 bootstrap.py 脚本,最初使用您需要/想要的这个项目的 Python 解释器运行。运行 bootstrap.py 将在本地创建/安装构建和您需要的所有东西。典型的使用模式是:

svn checkout <some_url_of_a_buildout_project>
cd my_project
/path/to/my/python bootstrap.py
bin/buildout
于 2011-04-20T06:26:26.270 回答