Я работаю над сценарием сборки, который должен установить пакет distutils на удаленном сервере.
На PyPi есть 2 рецепта для этого
colle.recipe.distutils 0.1 и zerokspot.recipe.distutils 0.1.1 .
Более поздний модуль является производным от первого и немного более удобен, чем первый, но оба имеют одну и ту же проблему, которую я сейчас опишу.
Когда выполняется bootstrap.py, он загружает пакет zc.buildout и помещает его в директорию яйца buildout. Это дает ./bin/buildout доступ к коду zc.buildout, но / usr / local / python пока ничего не знает о zc.buildout.
Buildout пытается установить пакет, запустив «python setup.py install» внутри подпроцесса. Это создает ImportError, потому что zc.buildout не установлен для /usr/local/python.
Итак, у меня есть несколько решений.
Установите zc.buildout, используя easy_install на удаленном сервере. Мне вообще не нравится эта опция, она делает особый случай для модуля, который очень незначителен.
Измените zerokspot.recipe.distutils таким образом, чтобы блокировка try включала «import zc.buildout» таким образом, она будет установлена, даже если zc.buildout не установлен. Это правильное решение, но несколько хакерское.
Замените подпроцесс кодом, который установит пакет, используя distutils api или setuptools api. Это было бы лучшим решением на мой взгляд.
Вопрос в том, как бы я поступил # 3?
Спасибо,
Тарас
PS: я решил проблему, создав другой пакет, который не зависит от zc.buildout. Мой пакет называется taras.recipe.distutils и доступен на pypi.