Как я могу иметь дело с яйцами питона для нескольких платформ в одном месте?

У нас есть общая установка python для всех наших систем, чтобы гарантировать, что каждая система имеет одинаковую установку python и чтобы облегчить проблемы конфигурации. Эта установка находится на общем диске. У нас также есть несколько платформ, которые разделяют эту установку. Мы можем обойти конфликтующие файлы, специфичные для платформы, установив параметр --exec-prefix configure при компиляции python.

Моя проблема в том, что теперь я хочу установить яйцо с помощью easy_install (или иным образом), которое зависит от платформы. easy_install помещает яйцо в каталог site-packages независимой от платформы части установки. У названия яйца есть платформа в этом, таким образом, не должно быть никакого конфликта. Но python загрузит только первый найденный файл. (Таким образом, в Solaris он может попытаться загрузить яйцо Linux). Изменение файла easy-install.pth может изменить найденный файл, но это довольно бесполезно.

Я могу переместить файлы.egg в каталог пакетов, зависящий от платформы, а затем использовать pkg_resources.require(), чтобы загрузить их (или вручную настроить путь). Но, похоже, мне не нужно было этого делать, потому что платформа названа яйцом.

Есть ли более общий способ, которым я могу гарантировать, что Python загрузит яйцо для правильной платформы?

4 ответа

Решение

Я закончил тем, что вручную переместил зависимое от платформы яйцо в каталог сайтов-пакетов для конкретной платформы (как указано по адресу http://docs.python.org/install/index.html). Затем я сделал еще один файл easy-install.pth в том же каталоге со списком яиц, которые нужно установить.

Это было бы гораздо удобнее, если бы easy_install учитывал exec_prefix и помещал зависимые от платформы яйца в правильное расположение "не-чистого распределения модулей". Возможно, я буду просить об этом у людей easy_install.

Попробуйте virtualenv... http://pypi.python.org/pypi/virtualenv... помогает создать изолированную среду с собственной папкой интерпретатора python + site_packages. Таким образом, вы никогда не будете конфликтовать с пакетами, установленными, скажем, по локальному пути.

У Python достаточно хуков, чтобы сделать это возможным, но это, вероятно, не мудро. Если вы действительно хотите реализовать это, посмотрите на PEP 302 и начните взламывать easy_install или же distribute исходный код. Как вы знаете, в действительности нет никакой логики easy-install.pth,

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

Используйте "easy_install -m" для установки всех пакетов, специфичных для платформы, чтобы в sys.path не было версии по умолчанию. Таким образом, разрешение версии происходит во время выполнения, и информация о платформе будет приниматься во внимание.

Другие вопросы по тегам