Есть ли в Python система управления пакетами / модулями?


145

Есть ли в Python система управления пакетами / модулями, похожая на ту, что есть в Ruby, где вы можете делать gem install packagename?

При установке модулей Python я вижу только ссылки python setup.py install, но для этого нужно сначала найти пакет.


3
Если вы считаете, что индекс пакетов Python PyPI должен содержать более четкие инструкции по установке пакетов, пожалуйста, проголосуйте и прокомментируйте проблему по адресу bitbucket.org/pypa/pypi/issue/149/…
полковник Паник

В то время как это было актуально в то время, ссылка в этом вопросе теперь на устаревшую документацию distutils. Я подал bugs.python.org/issue26014, чтобы пояснить, что эти документы должны быть более понятными, так как они больше не подходят для использования в качестве документации для конечного пользователя (они хранятся исключительно в интересах разработчиков инструментов).
ncoghlan

Ответы:


213

Недавний прогресс

Март 2014 : хорошие новости! Python 3.4 поставляется с Pip. Pip уже давно является стандартным менеджером пакетов Python. Вы можете установить такой пакет :

pip install httpie

Wahey! Это лучшая особенность любого выпуска Python. Это делает сообщество доступным для всех. Новички больше не исключаются из использования общественных библиотек из-за чрезмерной сложности установки.

Тем не менее , остается ряд выдающихся разочарований от опыта упаковки Python. В совокупности, они делают Python очень нежелательным для новичков. Кроме того, долгая история пренебрежения (т. Е. Отсутствие доставки с менеджером пакетов в течение 14 лет с Python 2.0 до Python 3.3) нанесла ущерб сообществу. Я опишу оба ниже.

Выдающиеся разочарования

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

Сайт PyPI не помогает

Каждый язык с менеджером пакетов имеет официальный (или квазиофициальный) репозиторий для сообщества для загрузки и публикации пакетов. Python имеет индекс пакета Python, PyPI. https://pypi.python.org/pypi

Давайте сравним его страницы со страницами RubyGems и Npm (менеджер пакетов Node).

  1. https://rubygems.org/gems/rails RubyGems страница для пакетаrails
  2. https://www.npmjs.org/package/express Страница Npm для пакетаexpress
  3. https://pypi.python.org/pypi/simplejson/ страница PyPI для пакетаsimplejson

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

Между тем, горе любому несчастному пользователю Python, который наивно обращается к PyPI. На https://pypi.python.org/pypi/simplejson/ они не найдут таких полезных инструкций. Тем не менее, есть большая зеленая ссылка «Скачать». Это не лишено смысла следовать этому. Ага, они кликают! Их браузер загружает .tar.gzфайл. Многие пользователи Windows не могут даже открыть его, но если они упорствуют, они могут в конечном итоге извлечь его, а затем запустить setup.pyи в конечном итоге с помощью Google setup.py install. Некоторые сдаются и заново изобретают колесо ..

Конечно, все это неправильно. простой способ установить пакет с помощью команды Pip. Но PyPI даже не упомянул Pip. Вместо этого он вел их по архаичному и утомительному пути.

Ошибка: не удается найти vcvarsall.bat

Numpy - одна из самых популярных библиотек Python. Попробуйте установить его с Pip, вы получите это загадочное сообщение об ошибке:

Ошибка: не удается найти vcvarsall.bat

Попытка исправить это один из самых популярных вопросов о переполнении стека: « ошибка: не удается найти vcvarsall.bat »

Мало кто преуспевает.

Для сравнения, в той же ситуации Ruby печатает это сообщение, которое объясняет, что происходит и как это исправить:

Пожалуйста, обновите ваш PATH, чтобы включить инструменты сборки, или загрузите DevKit с http://rubyinstaller.org/downloads и следуйте инструкциям на http://github.com/oneclick/rubyinstaller/wiki/Development-Kit.

Публиковать пакеты сложно

Ruby и Nodejs поставляются с полнофункциональными менеджерами пакетов, Gem (с 2007 года) и Npm (с 2011 года), и создали сообщества для обмена, сосредоточенные вокруг GitHub. Npm делает публикацию пакетов так же легко, как и их установку, у него уже есть 64k пакетов . RubyGems перечисляет 72 тыс . Пакетов . Почтенный индекс пакета Python перечисляет только 41 КБ .

история

Летающие в лицо свои " батарейки в комплекте девиз », Python поставлялся без менеджера пакетов до 2014 года.

До Пипа стандартом де-факто была команда easy_install . Это было ужасно неадекватно. Не было команды для удаления пакетов.

Пип был огромным улучшением. У этого были большинство особенностей Рубинового Драгоценного камня. К сожалению, Pip до недавнего времени было нелегко установить. На самом деле проблема остается главным вопросом Python о переполнении стека: « Как мне установить pip в Windows? »


3
Для всех, кто заинтересован, в PEP 439 предлагается способ упростить процесс установки pip, хотя я думаю, что этот PEP является лишь частью более широкой стратегии, которая рассматривается. Смотрите также обсуждение здесь .
Cartroo

3
@Cartroo, это отличные новости! Python заслуживает менеджера пакетов, я надеюсь, что разработчики сделают это.
полковник Паник

Абсолютно, давно пора. Я определенно надеюсь, что это войдет в Python 3.4, по крайней мере. К сожалению, я очень сомневаюсь, что в конечном итоге он будет перенесен на 2.x, но в конце туннеля есть хотя бы свет. Будем надеяться, что это не надвигающийся дракон ... (^_^)
Cartroo

6
В защиту Python новым языкам, таким как Ruby и Node, повезло, что они смогли наблюдать ошибки предыдущих языков и избегать их. Тем не менее, мне бы очень хотелось, чтобы управление пакетами на Python получило больше любви и заботы, поэтому я рад видеть PEP 439, на который указал @Cartroo.
Деннис

Я согласен с тем, что управление пакетами в Ruby - замечательная вещь с моей (конечной точки зрения) точки зрения ... gem install Xпохоже, работает на всех платформах. Итак, как они справились с этим для драгоценных камней, которые требуют компиляции кода C на Windows?
BSA

64

Индекс пакетов Python (PyPI) кажется стандартным:

  • Чтобы установить пакет: pip install MyProject
  • Чтобы обновить пакет pip install --upgrade MyProject
  • Для того, чтобы исправить версию пакетаpip install MyProject==1.0

Вы можете установить менеджер пакетов следующим образом:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Ссылки:


3
Это современный ответ.
Гринго Суаве

6
Я искал в интернете 20 минут, и этого ответа не было нигде. Огромное спасибо. Кроме того, у меня есть серьезные сомнения относительно использования python, если документация это плохо ... это должно быть на главной странице Python или доступно из Google или что-то еще
Крис J

63

И только , чтобы обеспечить контраст, есть также пип .


2
Спасибо! почему pip не упоминается на странице документации по установке модулей python?
Томми Ченг

Обратите внимание, что pip не поддерживает яйца, он только устанавливает исходные пакеты. Вообще говоря, pip делает многие вещи намного лучше, чем easy_install, но easy_install, скорее всего, будет установлен по умолчанию на большинстве unixes, а pip - нет.
Джеффри Харрис

8
@ Томми Верно! Если бы разработчики Python заботились о пользовательском опыте, они бы поставляли Python с менеджером пакетов (например, pip). Ruby поставляется с Gem, а Nodejs с Npm. stackoverflow.com/a/13445719/284795
Полковник Паник

21

Как разработчик Ruby и Perl и парень, изучающий Python, я не нашел, что easy_install или pip эквивалентны RubyGems или CPAN.

Я стараюсь поддерживать в своих системах разработки последние версии модулей по мере их обновления разработчиками и замораживать производственные системы в установленных версиях. Как RubyGems, так и CPAN упрощают поиск модулей, перечисляя имеющиеся возможности, а затем устанавливая и позже обновляя их по отдельности или в больших количествах, если это необходимо.

easy_install и pip упрощают установку модуля, РАЗ, когда я обнаружил его с помощью поиска в браузере или узнал об этом другими способами, но они не скажут мне, что доступно. Я могу явно назвать модуль для обновления, но приложения не будут сообщать мне, что было обновлено, и не будут обновлять все оптом, если я захочу.

Итак, базовая функциональность есть в pip и easy_install, но отсутствуют некоторые функции, которые хотелось бы видеть, чтобы сделать их более удобными и простыми в использовании и наравне с CPAN и RubyGems.


Этот ответ сейчас хорошо и действительно устарел.
ncoghlan


11

По крайней мере, в конце 2014 года следует рассмотреть возможность распространения Continuum Analytics Anaconda Python с менеджером пакетов conda . Он решает большинство серьезных проблем, с которыми люди сталкиваются в целом с Python (управление различными версиями Python, обновление версий Python, управление пакетами, виртуальные среды, совместимость с Windows / Mac) в одной последовательной загрузке.

Это позволяет вам делать практически все, что вы могли бы захотеть с Python, без необходимости менять систему вообще. Мое следующее предпочтительное решение - pip + virtualenv, но вам нужно либо установить virtualenv в системный Python (а ваша системная версия Python может не соответствовать нужной версии), либо выполнить сборку из исходного кода . Анаконда делает весь этот процесс одним нажатием кнопки, а также добавляет множество других функций.


7

Это было бы easy_install .


1
Если вы хотите понизить голос всех, кто сказал на странице, easy_installсначала проверьте даты. Это был верный совет, когда его дали почти 7 лет назад . Я не думаю, что мы, ответчики, будем регулярно пересматривать это, чтобы обновить, так что отрицательное голосование глупо.
Кирк Штраузер


5

Я не вижу ни MacPorts, ни Homebrew, упомянутых здесь в других ответах, но, поскольку я вижу, что они упоминались в других местах в Stack Overflow для связанных вопросов, я добавлю свои собственные 0,02 доллара США, которые многие считают MacPorts не просто пакетом. менеджер пакетов в целом (на сегодняшний день они перечисляют 16311 пакетов / портов, 2931 соответствует «python», хотя и только для Mac), но также и как достойный (возможно, лучший) менеджер пакетов для пакетов / модулей Python:

Вопрос

«... какой метод используют разработчики Mac Python для управления своими модулями?»

ответы

SciPy

«Mac (в отличие от Linux) не поставляется с менеджером пакетов, но есть пара популярных менеджеров пакетов, которые вы можете установить. Macports ...»

Я до сих пор спорю о том, стоит ли использовать MacPorts самостоятельно, но в данный момент я склоняюсь в этом направлении.


1
Сам доморощенный говорит: Вы можете установить пакеты Python с (устаревшая easy_install или) pip install <your_favorite_package>
Simone

4

В Windows установите http://chocolatey.org/ затем

choco install python

Откройте новое окно cmd с обновленным PATH. Далее делай

choco install pip

После этого вы можете

pip install pyside
pip install ipython
...

Я хотел ответить на это как комментарий к ответу Томаса Братта, но мне не хватает репутации ...
hansvb

3

Поскольку никто не упомянул здесь pipenv , я хотел бы описать свои взгляды, почему каждый должен использовать его для управления пакетами Python.

Как уже упоминалось @ColonelPanic, существует несколько проблем с индексом пакетов Python, а также с pip и virtualenv .

Pipenv решает большинство проблем с pip, а также предоставляет дополнительные функции.

Особенности Pipenv

Pipenv предназначен для замены pip и virtualenv, что означает, что pipenv автоматически создаст отдельную виртуальную среду для каждого проекта, что позволит избежать конфликтов между различными версиями Python / версиями пакетов для разных проектов.

  • Позволяет действительно детерминированные сборки, в то же время легко указав только то, что вы хотите.
  • Создает и проверяет хэши файлов на наличие заблокированных зависимостей.
  • Автоматическая установка необходимых питонов, если доступен pyenv.
  • Автоматически находит ваш проект дома, рекурсивно, при поиске Pipfile.
  • Автоматически генерирует Pip-файл, если он не существует.
  • Автоматически создает virtualenv в стандартном месте.
  • Автоматически добавляет / удаляет пакеты в Pipfile, когда они не установлены / установлены.
  • Автоматически загружает файлы .env, если они существуют.

Если вы раньше работали над проектами Python, вы бы поняли, что эти функции упрощают управление пакетами.

Другие Команды

  • checkпроверяет уязвимости безопасности и утверждает, что текущая среда соответствует требованиям PEP 508. ( что я считаю отличной возможностью, особенно после этого - вредоносные пакеты на PyPi )
  • graph покажет вам график зависимостей ваших установленных зависимостей.

Вы можете прочитать больше об этом здесь - Pipenv .

Монтаж

Вы можете найти документацию по установке здесь

PS: Если вам понравилась работа с запросами пакета Python , вам было бы приятно узнать, что pipenv принадлежит тому же разработчику Кеннету Рейтцу



0

Поэзия это то, что вы ищете. Он заботится об управлении зависимостями, виртуальных средах, работе.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.