Каковы преимущества и недостатки использования формата упаковки Python *.egg по сравнению с простым каталогом с setup.py?

Когда я выпускаю программу, я обычно просто создаю файл setup.py и помещаю его в pypi. Его можно установить с помощью pip, я всегда могу поделиться им с другими. Это работает для меня, и, видимо, для многих людей.

Я вижу выгоду создания exe, deb или rmp для простого системного администратора.

Но я действительно не вижу смысла в использовании яиц. Можете ли вы сказать мне, что я могу получить от этого?

Я также однажды прочитал, что у яиц были недостатки, но я больше не могу найти эту статью. Не могли бы вы описать мне, какие проблемы могут возникнуть при использовании этого формата упаковки?

Обратите внимание, что я видел этот вопрос, но ответ также применим к простому каталогу с setup.py. Это не говорит мне о преимуществах яиц по сравнению с более простым форматом.

2 ответа

Решение

Яйца привязаны к конкретной архитектуре и версии Python, и до Python 3.3, если яйцо содержит расширения C, даже внутренний размер представления Unicode (UCS2 против UCS4).

К сожалению, последнее различие не отражено в метаданных яйца; имя файла egg содержит архитектуру и версию python (major.minor, то есть 2.4 или 3.1), но размер байта в юникоде опущен.

Из-за этого яйца не очень переносимы. .tgz или же .zip Распределение, с другой стороны, (надеюсь) не зависит от платформы. Ваш установочный инструмент, будь то easy_install, pip, buildout или что-то еще, знает, как скомпилировать дистрибутив пакета Python в яйцо для вас, так что вы обычно избегаете распространения .egg файлы в целом.

Единственное исключение - Windows, где большинству людей не хватает набора инструментов для компиляции расширений Си. Поскольку в дистрибутивах Windows Python по умолчанию используется UCS2, вы обычно можете распространять Windows .egg сборки пакетов с расширениями C, чтобы облегчить установку с помощью автоматизированных инструментов.

Если вы используете setup.py скрипт для создания дистрибутива, тривиально создать пакет только для исходного кода для загрузки в PyPI. Я могу порекомендовать Python Packaging User Guide для получения дополнительной информации.

*.egg - это чистый формат развертывания, который используется после установки пакета через easy_install или pip.

Не имеет смысла загружать файлы как.egg в PyPI. Люди, делающие это, понятия не имеют, что делают.

Подходящим выпуском PyPI является либо архив.tar.gz, либо архив.zip, либо файл.exe (например, для двоичных файлов Windows), но НИКОГДА НИКОГДА не файл *.egg.

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