Как сделать управление пакетами Python?

Исходя из фона Node.js + npm, он действительно кошмарно пытается понять все, что связано с управлением пакетами Python. После нескольких часов исследований я наткнулся на все эти ключевые слова:

  • easy_install
  • virtualenv
  • пип
  • Setuptools
  • Distutils
  • PyPI
  • колесо
  • яйцо
  • сайт-пакеты

Может кто-нибудь помочь мне расшифровать эти термины и поставить их в историческом контексте? Например, "distutils был первым менеджером пакетов, но он был заменен на X в Y, потому что Z".

Я очень люблю Python (язык), но управление пакетами кажется настоящим кошмаром, чтобы учиться тому, кто использовал удивительные npm в течение последних нескольких лет.

Ответы

Ответ 1

Типы пакетов
Egg vs Wheel vs Ни один. То, что не подразумевается ни тем, что пакет python может быть установлен из его "источника" без упаковки в виде яйца или колеса.

Утилиты для упаковки
Существует несколько библиотек, которые предоставляют утилиты для упаковки приложений python, включая distutils и setuptools. На этом уже есть отличный пост.

easy_install
Часть setuptools, позволяет создавать и устанавливать пакеты python. Часто разочаровался в пользу Пипа. Предназначен для упрощения установки пакетов, выполняя основную загрузку и перемещая их в нужное место для вас (отсюда и название).

Pip
Менеджер пакетов для пакетов python и замена easy_install! Смотрите здесь по некоторым причинам, почему люди предпочитают это с помощью easy_install. Может выполнять аккуратные вещи, например, устанавливать пакет непосредственно из репозитория git или компилировать расширения C на целевой машине. Последнее является спорным относительно того, желательно ли это, но тем не менее это хорошая функция, если вы этого хотите.

PyPI
Индекс пакета python, где easy_install и Pip ищут доступные пакеты, по умолчанию. В основном это гигантский онлайн-репозиторий модулей, которые принимаются сообществом.

virtualenv
Способ взлома переменных среды для "изоляции" установки python и связанных с ней модулей. Предпочитает Pip, потому что Ian Bicking написал их обоим. В основном, вы используете pip для установки virtualenv system wide, который затем позволяет создавать виртуальные среды python, каждый из которых имеет собственную копию python, pip и различных модулей. Это позволяет вам иметь несколько версий python или устанавливать модуль только для тестирования, не сбрасывая общесистемную установку python.

virtualenvwrapper
Действительно удобная оболочка script, которая упрощает создание и отключение виртуальных сред.

сайт-пакеты
Одно из поддерживаемых мест для установки модулей python. Живет где-то вроде /usr/lib/pythonX.X/site-packages. Другие поддерживаемые местоположения, такие как dist-packages или пользовательские местоположения.

Что все это значит для вас?
Я бы рекомендовал вам не обращать внимания на easy_install и просто использовать pip. Также всегда используйте virtualenv. Как правило, единственными модулями python, которые вы должны установить в системной среде на своей рабочей станции, являются pip и virtualenv. Я полностью игнорировал яйца и колеса, но если вы планируете профессионально распределять пакеты или размещать их на PyPI, вы, вероятно, захотите их исследовать. Кроме того, если вы создаете пакеты python, вам нужно научиться писать настройку script с помощью setuptools. Моя рекомендация - никогда не использовать distutils.

Еще немного чтения
Страница на python.org об упаковке, которая охватывает многие из этих тем
Пакет Python - это кошмар
Отличная статья, которая идет вразрез с наиболее распространенными рекомендациями, включая мои!

Ответ 2

Там некоторые смешивания в параметрах, которые вы перечисляете:

  • virtualenv - используется для создания изолированных сред
  • site-packages - стандартное расположение, где находятся пакеты /libs python

  • pypi - это репозиторий

  • easy_install - находится в пакете setuptools

  • pip - был написан для улучшения easy_install.

яйца питона

Ответ 3

По состоянию на декабрь 2018 года канонический способ распространения программного обеспечения Python выглядит следующим образом:

  • Используйте setuptools в качестве библиотеки распространения
  • Используйте wheel в качестве формата распространения

$ python setup.py bdist_wheel

  • Как только у вас есть правильный файл setup.py, вы можете создать исходный архив, который можно распространять

    $ python setup.py sdist

Команда sdist создает архив в каталоге dist исходного дерева. В архиве содержатся все модули Python, являющиеся частью дерева исходных текстов.

  • Последний шаг - экспортировать ваш пакет туда, куда пользователи могут установить его через pip. Это означает публикацию вашего проекта в PyPI.

убедитесь, что у вас установлены колеса, чтобы установить bdist_wheel

pip install wheel