buildout - использование другой версии Python - PullRequest
6 голосов
/ 20 апреля 2011

Я настроил сборочный проект (точнее, django), который должен работать на старой машине, он отлично работает в моей локальной системе с python 2.7.

На рабочем сервере работает Python 2.5, и я хочу настроить buildout так, чтобы он загружал и использовал 2.6, но только этот проект не для всей системы.

Так что я предполагаю, что он должен использовать какой-то рецепт, но ведьма и как?Я не могу найти один.Я надеюсь достичь этого только с помощью buildout.cfg файла ..

Ответы [ 4 ]

8 голосов
/ 20 апреля 2011

Buildout специально поддерживает этот сценарий.Каждая часть в сборке может использовать свой собственный интерпретатор python, или вы можете установить один интерпретатор python глобально для всех частей.По умолчанию это Python, используемый для запуска buildout.

Чтобы установить используемый интерпретатор 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
4 голосов
/ 12 декабря 2012

Какой бы питон вы не использовали для запуска начального bootstrap.py, он будет использоваться для всего вашего проекта.Все пути будут ссылаться на этот конкретный питон и пакеты сайтов для этого конкретного питона.

Это одна из лучших вещей в buildout

Это 32-битный питон 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

Теперь посмотрим на созданный бин / *. 1011 *

Затем выполните ваш фактический бин / buildout -c dev.cfg и посмотрите на скрипты в корзине.Для моего 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 на самом деле правильный, но он не очень хорошо описал решение.(Я сам раньше это игнорировал)

0 голосов
/ 28 марта 2018

Мне кажется, что ответ Мартина Питерса не помогает.Мне нужны разные версии 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) будет записываться та интерпретатор той версии python, которую я использовал для начальной загрузки.Так что мой buildout.cfg не работает должным образом.

0 голосов
/ 20 апреля 2011

Обычно каждый сборочный проект содержит скрипт bootstrap.py с изначально запущенным используя интерпретатор Python, который вам нужен / нужен для этого проекта. Запуск bootstrap.py локально создаст / установит сборку и все необходимое. Типичный шаблон использования:

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