Установка пакетов Python в Windows

Недавно я начал изучать Python, и я немного смущен тем, как пакеты распространяются и устанавливаются.

Я понимаю, что официальный способ установки пакетов distutils: вы загружаете исходный архив, распаковываете его и запускаете: python setup.py install, затем модуль автоматически устанавливает себя

Я также знаю о setuptools, который поставляется с easy_install помощником script. Он использует яйца для распространения, и, насколько я понимаю, построен поверх distutils и делает то же самое, что и выше, плюс он заботится о любых зависимых зависимостях, все из которых получены из PyPi

Тогда есть также pip, который я до сих пор не уверен, как он отличается от других.

Наконец, поскольку я нахожусь на машине с Windows, многие пакеты также предлагают двоичные сборки через установщик Windows, особенно те, которые требуют компиляции кода C/Fortran, что в противном случае было бы кошмаром вручную скомпилировать на окнах (предполагается, что у вас есть среда MSVC или MinGW/Cygwin dev со всеми необходимыми настройками библиотек.. тем не менее, пытайтесь создать numpy или scipy самостоятельно, и вы поймете!)

Так может кто-то помочь мне разобраться во всем этом и объяснить различия, плюсы и минусы каждого метода. Я хотел бы знать, как каждый отслеживает пакеты (реестр Windows, файлы конфигурации,..). В частности, как вы будете управлять всеми вашими сторонними библиотеками (иметь возможность отображать установленные пакеты, отключать/удалять и т.д.).

Ответы

Ответ 1

Я использую pip, а не в Windows, поэтому я не могу обеспечить сравнение с опцией Windows-installer, просто некоторые сведения о pip:

  • Пип построен поверх настроек setuptools и требует его установки.
  • Pip - это замена (улучшение) для easy_install setuptools. Он делает все, что делает easy_install, и многое другое (убедитесь, что все нужные дистрибутивы могут быть загружены до фактической установки любого из них, чтобы избежать сломанной установки, списка установленных дистрибутивов и версий, удалить, найти PyPI, установить из файла требований с перечислением нескольких дистрибутивов и версии...).
  • В настоящее время Pip Pip не поддерживает установку какой-либо формы прекомпилированных или двоичных дистрибутивов, поэтому любые дистрибутивы с расширениями, требующими компиляции, могут быть установлены только в том случае, если у вас есть соответствующий компилятор. Поддержка установки из двоичных установщиков Windows находится в дорожной карте, но это неясно, когда это произойдет.
  • До недавнего времени поддержка pppup была нечеткой и непроверенной. Благодаря большой работе от Dave Abrahams, pip trunk теперь передает все свои тесты в Windows (и там есть сервер непрерывной интеграции, который помогает нам гарантировать, что он остается таким образом), но релиз еще не сделан, включая эту работу. Поэтому более надежная поддержка Windows должна появиться со следующей версией.
  • Все стандартные механизмы установки пакета Python хранят все метаданные об установленных дистрибутивах в файле или файлах рядом с фактическими установленными пакетами. Distutils использует файл distribution_name-X.X-pyX.X.egg-info, pip использует аналогично названный каталог с несколькими файлами метаданных. Easy_install помещает весь установленный код Python для распространения внутри своего собственного zipfile или каталога и помещает в него каталог EGG-INFO с метаданными. Если вы импортируете пакет Python из интерактивного приглашения, проверьте значение пакета.__ file__; вы должны найти метаданные для этого дистрибутива рядом.
  • Информация о установленных дистрибутивах хранится только в любом виде глобального реестра с помощью таких инструментов упаковки, как Windows, Apt или RPM. Стандартные инструменты упаковки Python не изменяют или не обращают внимание на эти списки.
  • Pip (или, на мой взгляд, любой инструмент для упаковки Python) лучше всего использовать с virtualenv, который позволяет создавать изолированные в -project мини-среды Python, в которые вы можете устанавливать пакеты, не затрагивая вашу общую систему. Каждый новый virtualenv автоматически поставляется с установленным в нем пакетом.

Пара других проектов, о которых вы, возможно, захотите также знать (да, там еще!):

  • distribute - это вилка setuptools, которая содержит некоторые дополнительные исправления и функции.
  • distutils2 предназначен для "следующего поколения" упаковки Python. Это (надеюсь) принятие лучших функций distutils/setuptools/distribute/pip. Он разрабатывается независимо и еще не готов к использованию, но в конечном итоге должен заменить distutils в стандартной библиотеке Python и стать де-факто упаковочным решением Python.

Надеюсь, все это помогло прояснить что-то! Удачи.

Ответ 2

Я использую windows и python. Это несколько разочаровывает, потому что pip не всегда работает, чтобы устанавливать вещи. Python движется к pip, поэтому я все еще использую его. Пип хорош, потому что вы можете удалить элементы и использовать

pip freeze > requirements.txt
pip install -r requirements.txt

Еще одна причина, по которой мне нравится pip, - это виртуальные среды, такие как venv с python 3.4. Я нашел, что venv намного проще использовать в окнах, чем virtualenv.

Если вы не можете установить пакет, вам нужно найти для него двоичный файл. http://www.lfd.uci.edu/~gohlke/pythonlibs/

Я нашел эти двоичные файлы очень полезными.

Пип пытается сделать что-то, называемое колесом для двоичных установок.

pip install wheel
wheel convert path\to\binary.exe
pip install converted_wheel.whl

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