Подтвердить что ты не робот

В чем разница между распределением "sdist".tar.gz и яйцом-питоном?

Я немного смущен. Кажется, существуют два разных типа пакетов Python, исходные дистрибутивы (setup.py sdist) и распределение яиц (setup.py bdist_egg).

Оба кажутся просто архивами с теми же данными, исходными файлами python. Одно из отличий заключается в том, что pip, самый рекомендуемый менеджер пакетов, не может установить яйца.

В чем разница между двумя и тем, что "способ" распространять мои пакеты?

(Заметьте, я не хочу распространять свои пакеты через PyPI, но я хочу использовать диспетчер пакетов, который извлекает мои зависимости из PyPI)

4b9b3361

Ответ 1

setup.py sdist создает исходный дистрибутив: он содержит setup.py, исходные файлы вашего модуля / script (.py файлы или .c/.cpp для двоичных модулей), ваш файлы данных и т.д. Результатом является архив, который затем может быть использован для перекомпилирования всего на любой платформе.

setup.py bdistbdist_*) создает встроенный дистрибутив: он включает файлы .pyc,.so/.dll/.dylib для двоичных модулей,.exe, если используется py2exe on Windows, ваши файлы данных... но не setup.py. Результатом является архив, специфичный для платформы (например, linux-x86_64) и для версии Python, который может быть установлен просто путем извлечения его в корень вашей файловой системы (исполняемые файлы находятся в /usr/bin (или эквивалент), файлы данных в /usr/share, модули в /usr/lib/pythonX.X/site-packages/...). Вы даже можете создавать rpm-архивы, которые могут быть напрямую установлены с помощью диспетчера пакетов.

Ответ 2

Существует более двух разных типов пакетов Python (дистрибутив). Эта команда перечисляет множество подкоманд:

$ python setup.py --help-commands

Обратите внимание на различные типы bdist.

Яйцо было новым типом упаковки, введенным setuptools, но позже принятым стандартной библиотекой. Он должен быть установлен монолитным на sys.path. Это отличается от пакета sdist, который предназначен для запуска setup.py install, копирования каждого файла на место и, возможно, принятия других действий (создание модулей расширения, запуск дополнительного произвольного кода Python, включенного в пакет).

яйца в значительной степени устарели в этот момент времени. Формат предпочтительной упаковки теперь представляет собой формат "колеса".

Создаете ли вы sdist или яйцо (или колесо) независимо от того, сможете ли вы объявить зависимости, которые имеет пакет (который будет автоматически загружен при установке PyPI). Все, что необходимо для этой функции зависимостей, - это объявить зависимости, используя дополнительные API, предоставленные дистрибутивом (преемником setuptools) или distutils2 (преемник distutils - иначе известный как упаковка в текущей версии разработки Python 3. х).

https://packaging.python.org/ - хороший ресурс для получения дополнительной информации о упаковке. Он охватывает некоторые особенности декларирования зависимостей (например, install_requires, но не extras_require afaict).