Python упаковывает установку в Windows

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

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

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

Затем существует также зернышко, которое я все еще не уверен, как оно отличается от других.

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

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

14
задан Amro 9 July 2014 в 10:20
поделиться

1 ответ

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

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

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

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

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

11
ответ дан 1 December 2019 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: