2017-02-23 113 views
2

Когда мне нужна библиотека Python, я использую pip для извлечения из PyPi, и если я создам проект и хочу поделиться им, мне просто нужно иметь файл setup.py, и это упростит его установку. Поэтому мне было интересно, что такое прецедент для упаковки яиц или колес.Почему нам нужна упаковка python (например, яйцо)?

+0

Я знаю, что это такое.Я не понимаю его необходимости, потому что концепция компиляции не применяется к python, поскольку она применяется, например, к C или java. –

ответ

2

Python Packaging User Guide должен сказать следующее по этой теме:

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

Эти форматы могут использоваться для распространения пакетов, содержащих двоичные модули расширения. В противном случае они потребовали бы компиляции во время установки.

Если нет компиляции не вовлечена source distribution в принципе достаточно, но руководство пользователя по-прежнему рекомендует создать колесо для повышения производительности:

Минимально, вы должны создать Source Distribution:

python setup.py sdist

«Исходный дистрибутив» является незастроенным (то есть, оно не является встроенным дистрибутивом) и требует шага сборки, когда он устанавливается в pip. Даже если дистрибутив является чистым python (то есть не содержит расширений), он по-прежнему включает этап построения для создания метаданных установки из setup.py.

[...]

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

Короче говоря, упаковка удобная вещь - в основном для пользователя.

Колесные пакеты унифицируют процесс распространения и установки проектов, содержащих чистый код на основе python, зависящий от платформы или скомпилированные расширения. Пользователю не нужно беспокоиться, если пакет написан на Python или на C - он просто работает.

+0

спасибо, но обычно все проекты, с которыми я работаю, имеют только конфигурационные файлы и скрипты python, поэтому компиляции нет необходимости. Поэтому я предполагаю, что упаковка - это не то, что обычно используется или необходимо (по крайней мере, в моем случае) –

+0

Спасибо! На мой вопрос отвечает :) –

1

Пакеты с яйцами - это более старый стандарт, вы должны игнорировать их в наши дни. Используйте pip install . вместо ./setup.py install, чтобы предотвратить их создание. (добавление: они также являются .zip с в маскировке, из которых Python считывает данные пакета - не совсем самое эффективное решение)

Колесные пакеты, с другой стороны, являются новым стандартом. Они позволяют создавать переносные двоичные пакеты для Windows, macOS и Linux (yes, Linux!). В настоящее время вы можете просто сделать pip install PyQt5 (в качестве примера), и он просто будет работать, не требуется компилятор C++ и библиотеки Qt в системе. Все предварительно скомпилировано и включено в колесо. Небанковские пакеты также выигрывают, потому что безопаснее не запускать setup.py (все метаданные находятся в колесе). (добавление: это также .zip с, но они распакованы при установке)

+0

Спасибо. Однако, пакеты колес не приносят никакой пользы, если мой проект содержит только скрипты python и файлы конфигурации, правильно? –

+0

@ M.Buil http://pythonwheels.com/ - * Позволяет избежать выполнения произвольного кода для установки. (Avoids setup.py). Создает .pyc-файлы как часть установки, чтобы убедиться, что они соответствуют используемому интерпретатору python. Более последовательная установка между платформами и машинами. * –