Каковы лучшие практики для создания дистрибутивов Python (яиц) на (и для) нескольких операционных систем - PullRequest
7 голосов
/ 17 февраля 2012

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

Так происходит наш цикл разработки и выпуска.

Как только разработчики завершат "тестирование" пакетадистрибутив (яичный файл) пакета подготовлен и помещен в центральное место архивирования.Когда мы хотим развернуть наше программное обеспечение для Заказчиков, одни и те же дистрибутивы (файлы egg) будут загружены и установлены в их среде.

Предполагается, что «тестирование» происходит в нескольких операционных системах (для проверки совместимости API).на разных платформах), какова лучшая практика для подготовки дистрибутивов и отправки в центральное место архивирования.

Лучше ли иметь специальные яйца операционной системы на сервере архивации (например, samplepkg-1.0.0.win32.egg и samplepkg-1.0.0.linux.egg? Не знаете, как их можно подготовить таким образом с помощью setuptools.) Или есть одно яйцо, потому что API остается одинаковым на разных платформах?Любая другая практика, которой придерживается сообщество?

Ответы [ 4 ]

5 голосов
/ 21 февраля 2012

Вы можете использовать один пакет, если:

  1. Пакет не использует функции / классы, которые недоступны на всех ваших целевых платформах (см., Например, главы 36-39 справочника стандартной библиотеки Python).для версии 2.7.2 для вещей, которые вы не должны использовать в этом случае)
  2. Вы не используете расширения, написанные на C / C ++, которые необходимо компилировать для каждой платформы.

Как правило, рекомендуется избегать определенных функций ОС, которые доступны не на всех ваших целевых платформах.Стандартная библиотека достаточно хорошо задокументирована в этом отношении.

2 голосов
/ 23 февраля 2012

Я думаю, что в этом случае использование одного пакета будет более сложным по причинам, указанным Роландом выше.В вашей среде разработки у вас могут быть отдельные папки для отдельных платформ, каждая из которых имеет специфический для платформы код (например, расширения / библиотеки, написанные на C / C ++).Вам нужно будет имитировать ваши setuptools в этих папках для создания отдельных яиц, но в конечном итоге это будет менее сложно (я думаю, не зная больше о том, с каким кодом вы на самом деле работаете), чем пытаться собрать все в один пакет.

В любом случае, чтение документации по стандартной библиотеке, а также distutils (http://docs.python.org/distutils/) должны помочь вам найти ваше решение.

1 голос
/ 24 февраля 2012

Яйца для платформы предназначены только для распространения упаковок, содержащих код C;в противном случае сами файлы egg не зависят от платформы, и вам нужно распространять только одно независимое от платформы яйцо.

Если вы используете инструменты автоматической установки или API времени выполнения pkg_resources для поиска библиотек и плагинов, вы можете простовыгрузите все яйца в один каталог, и инструмент установки или API времени выполнения определит, из какого яйца установить или импортировать.

tl; dr версия: способ, которым setuptools создает яйца, - это способ их распределения;если вы попытаетесь превратить кроссплатформенное яйцо в зависимое от платформы или наоборот, вы, скорее всего, испытаете некоторую боль.; -)

0 голосов
/ 08 марта 2012

Если у вас есть только модули Python, держите все различия, скрытые в Python, либо одинаковыми файлами (python std lib), либо отдельными файлами (pyserial).

Если у вас есть скомпилированные модули, это немного сложнее.

Я использую следующую структуру каталогов для проекта, который требует скомпилированного расширения:

./lib/display.py  # frontend, platform-independent
./lib.linux-x86_64-2.6/_display.so
./lib.linux-armv5tejl-2.6/_display.so

И этот код в начале начала программы:

sys.path.append("lib.%s-%s-%s.%s" % ((posix.uname()[0].lower(),
                                      posix.uname()[4])
                                     +sys.version_info[:2]))

Вы также можете обернуть структуру таким образом в .egg, если вы укажете, что он не является zip-безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...