Когда мне нужна библиотека Python, я использую pip для извлечения из PyPi, и если я создам проект и хочу поделиться им, мне просто нужно иметь файл setup.py, и это упростит его установку. Поэтому мне было интересно, что такое прецедент для упаковки яиц или колес.Почему нам нужна упаковка python (например, яйцо)?
ответ
Python Packaging User Guide должен сказать следующее по этой теме:
колеса и яйца являются оба формата упаковки, которые направлены на поддержку использования случай необходимости в установке артефакт, который не требует здания или компиляции , что может быть дорогостоящим в процессах тестирования и производства.
Эти форматы могут использоваться для распространения пакетов, содержащих двоичные модули расширения. В противном случае они потребовали бы компиляции во время установки.
Если нет компиляции не вовлечена source distribution в принципе достаточно, но руководство пользователя по-прежнему рекомендует создать колесо для повышения производительности:
Минимально, вы должны создать Source Distribution:
python setup.py sdist
«Исходный дистрибутив» является незастроенным (то есть, оно не является встроенным дистрибутивом) и требует шага сборки, когда он устанавливается в pip. Даже если дистрибутив является чистым python (то есть не содержит расширений), он по-прежнему включает этап построения для создания метаданных установки из setup.py.
[...]
Вы должны также создать колесо для вашего проекта. Колесо - это встроенный пакет, который может быть установлен без необходимости проходить процесс сборки. Установка колес значительно быстрее для конечного пользователя, чем установка из источника.
Короче говоря, упаковка удобная вещь - в основном для пользователя.
Колесные пакеты унифицируют процесс распространения и установки проектов, содержащих чистый код на основе python, зависящий от платформы или скомпилированные расширения. Пользователю не нужно беспокоиться, если пакет написан на Python или на C - он просто работает.
спасибо, но обычно все проекты, с которыми я работаю, имеют только конфигурационные файлы и скрипты python, поэтому компиляции нет необходимости. Поэтому я предполагаю, что упаковка - это не то, что обычно используется или необходимо (по крайней мере, в моем случае) –
Спасибо! На мой вопрос отвечает :) –
Пакеты с яйцами - это более старый стандарт, вы должны игнорировать их в наши дни. Используйте pip install .
вместо ./setup.py install
, чтобы предотвратить их создание. (добавление: они также являются .zip
с в маскировке, из которых Python считывает данные пакета - не совсем самое эффективное решение)
Колесные пакеты, с другой стороны, являются новым стандартом. Они позволяют создавать переносные двоичные пакеты для Windows, macOS и Linux (yes, Linux!). В настоящее время вы можете просто сделать pip install PyQt5
(в качестве примера), и он просто будет работать, не требуется компилятор C++ и библиотеки Qt в системе. Все предварительно скомпилировано и включено в колесо. Небанковские пакеты также выигрывают, потому что безопаснее не запускать setup.py
(все метаданные находятся в колесе). (добавление: это также .zip
с, но они распакованы при установке)
Спасибо. Однако, пакеты колес не приносят никакой пользы, если мой проект содержит только скрипты python и файлы конфигурации, правильно? –
@ M.Buil http://pythonwheels.com/ - * Позволяет избежать выполнения произвольного кода для установки. (Avoids setup.py). Создает .pyc-файлы как часть установки, чтобы убедиться, что они соответствуют используемому интерпретатору python. Более последовательная установка между платформами и машинами. * –
Я знаю, что это такое.Я не понимаю его необходимости, потому что концепция компиляции не применяется к python, поскольку она применяется, например, к C или java. –