我已经设置了必须在旧机器上运行的buildout项目(django具体),它在我的本地系统中使用python 2.7正常工作。
在生产服务器中,它运行python 2.5,我想配置它将下载并使用2.6的buildout,但只有这个项目不是系统范围的。
所以我认为它应该使用某种食谱,但女巫和如何?我找不到一个。我希望只使用buildout.cfg
文件来实现它。
答案 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