Каковы преимущества и недостатки использования формата упаковки 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.