В чем разница между следующими командами: - pip install -r requirements.txt и easy_install `cat requirements.txt`? [Дубликат]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

885
задан KarSho 27 August 2014 в 18:43
поделиться

9 ответов

Многие из ответов здесь устарели до 2015 года (хотя изначально принятого ответа от Даниэля Розмана нет). Вот текущее состояние вещей:

  • Двоичные пакеты теперь распространяются как колеса (.whl файлы) - не только на PyPI, но и в сторонних репозиториях, таких как Расширительные пакеты Christoph Gohlke для Windows . pip может обрабатывать колеса; easy_install не может.
  • Виртуальные среды (которые встроены в 3.4 или могут быть добавлены к 2.6 + / 3.1 + с помощью virtualenv ) стали очень важными и выдающийся инструмент (и рекомендованный в официальными документами ); они включают pip из коробки, но даже не работают с easy_install.
  • Пакет distribute, включающий easy_install, больше не поддерживается. Его улучшения над setuptools снова слиты в setuptools. Попытка установить distribute просто установит setuptools вместо этого.
  • easy_install сам только квази-поддерживается.
  • Все случаи, когда pip были низшими to easy_install -установка из распакованного дерева исходных текстов, с репо DVCS и т. д. - давно ушла; вы можете pip install ., pip install git+https://.
  • pip поставляется с официальными пакетами Python 2.7 и 3.4+ от python.org, а загрузочная загрузка pip включена по умолчанию, если вы строите из исходного кода .
  • Различные неполные биты документации по установке, использованию и созданию пакетов были заменены на Python Packaging User Guide . Собственная документация Python на Установка модулей Python теперь подчиняется этому руководству пользователя и явно вызывает pip как «предпочтительную программу установки».
  • Другие новые функции были добавлены в pip за годы, которые никогда не будут в easy_install. Например, pip позволяет легко клонировать ваши пакеты сайтов, создавая файл требований и затем устанавливая его с помощью одной команды с каждой стороны. Или преобразовать файл требований в местное репо, чтобы использовать его для внутреннего развития. И т. Д.

Единственная веская причина, по которой я знаю, использовать easy_install в 2015 году, является особым случаем использования предварительно установленных версий Python от Apple с OS X 10.5-10.8. Начиная с 10.5, Apple включила easy_install, но по состоянию на 10.10 они все еще не включают pip. С 10.9+ вы все равно должны использовать get-pip.py, но для 10.5-10.8 у этого есть некоторые проблемы, поэтому легче sudo easy_install pip. (В общем, easy_install pip - плохая идея, и вы хотите это сделать только для OS X 10.5-10.8.) Кроме того, 10.5-10.8 включают readline таким образом, что easy_install знает, как клонировать, но pip нет, поэтому вы также хотите sudo easy_install readline, если хотите его обновить.

263
ответ дан Community 19 August 2018 в 04:46
поделиться
  • 1
    @drozzy: Может быть. Но подумайте, что еще через 5 лет мой ответ будет устаревшим, как и все остальные, в то время как Даниэль Роземанн вне времени. Кроме того, мой ответ был бы не таким хорошим, если бы он не мог положиться на 5-летний принятый ответ, который демонстрирует why сообщество Python позади pip за прошедшее время. – abarnert 26 May 2015 в 00:44
  • 2
    Стоит отметить, что некоторые упакованные версии пипсов были ошибочными, а pip не удалось обновить сам. Считаете ли вы это ироничным или нет, в таких случаях самым простым решением является easy_install -U pip или easy_install3 -U pip. – analytik 28 July 2016 в 09:43
  • 3
    & quot; но даже не работают должным образом с easy_install & quot; Это был не мой опыт, хотя я не пробовал в то время, так как сейчас доминируют колеса. Но бинарные файлы Кристофа Гольке раньше распространялись как исполняемые яйца. Вызов easy_install на них был only , я мог бы установить эти пакеты в виртуальную среду, и это никогда не вызывало у меня изжоги. Каким образом easy_install больше не работает с виртуальными envs? – jpmc26 10 May 2018 в 11:44

В дополнение к ответу fuzzyman:

pip не будет устанавливать бинарные пакеты и не будет хорошо протестирован в Windows.

Поскольку Windows не поставляется с компилятор по умолчанию часто не может быть использован там. easy_install может устанавливать бинарные пакеты для Windows.

Вот трюк в Windows:

  • вы можете использовать easy_install <package> для установки бинарных пакетов, чтобы избежать создания binary
  • вы можете использовать pip uninstall <package>, даже если вы использовали easy_install.

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

См. Текущую версию doku: http://www.pip-installer.org/en/latest/other-tools.html#pip -compared-to-easy-install

Я спрошу в списке рассылки, что планируется для этого.

Вот последние update:

Новый поддерживаемый способ установки двоичных файлов будет wheel! Это еще не стандарт, но почти. Текущая версия по-прежнему является альфа: 1.0.0a1

https://pypi.python.org/pypi/wheel

http: / /wheel.readthedocs.org/en/latest/

Я проведу wheel, создав установщик OS X для PySide, используя wheel вместо яиц. Вернется и сообщит об этом.

cheers - Chris

Быстрое обновление:

Переход к wheel почти закончился. Большинство пакетов поддерживают wheel.

Я пообещал построить колеса для PySide, и я сделал это прошлым летом.

СОВЕТ: Несколько разработчиков до сих пор не смогли поддержать формат колес, просто потому, что они забывают заменить distutils на setuptools. Часто легко конвертировать такие пакеты, заменив это одно слово на setup.py.

23
ответ дан Christian Tismer 19 August 2018 в 04:46
поделиться
  • 1
    обновлено выше - я думаю, что ожидание почти закончилось ;-) – Christian Tismer 28 April 2013 в 01:06
  • 2
    Я должен обновить это снова, потому что колесо стало стандартом весной 2014 года. На самом деле, я думаю, что такие старые нити не должны меняться бесконечно, потому что старые ответы были довольно хорошими - легко заменить все, когда меняется реальность. Но справедливо ли, когда исходная причина вопроса исчезла? – Christian Tismer 13 January 2015 в 19:50
  • 3
    Очень полезный ответ для пользователей Windows. – kta 4 July 2015 в 02:28

ТРЕБОВАНИЯ файлы.

Серьезно, я использую это совместно с virtualenv каждый день.


БУДУЩАЯ ЗАВИСИМОСТЬ УПРАВЛЕНИЯ, GUYS

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

Из документации Heroku https://devcenter.heroku.com / articles / python

Вы создаете виртуальную среду и устанавливаете оболочку для ее использования. (инструкции bash / * nix)

virtualenv env
source env/bin/activate

Теперь все скрипты python, запущенные с этой оболочкой, будут использовать пакеты и конфигурацию этой среды. Теперь вы можете установить пакет локально в эту среду, не устанавливая его на глобальном уровне на вашем компьютере.

pip install flask

Теперь вы можете сбросить информацию о том, какие пакеты установлены с помощью

pip freeze > requirements.txt

Если вы проверили этот файл в контроле версий, когда кто-то еще получит ваш код, они могут настроить свою собственную виртуальную среду и установить все зависимости с помощью:

pip install -r requirements.txt

Каждый раз, когда вы можете автоматизировать скуку, как это является удивительным.

110
ответ дан Conrad.Dean 19 August 2018 в 04:46
поделиться

pip не будет устанавливать бинарные пакеты и не будет хорошо протестирован в Windows.

Поскольку Windows не поставляется с компилятором по умолчанию, пип часто не может использован там. easy_install может устанавливать бинарные пакеты для Windows.

78
ответ дан fuzzyman 19 August 2018 в 04:46
поделиться
  • 1
    Интересно, я никогда об этом не думал. pip также не поддерживает настройки setup & quot; extras & quot; функции, которые используются, по крайней мере, людьми Zope. – Sridhar Ratnakumar 11 July 2010 в 19:22
  • 2
    Является ли это признаком необходимости использования gcc-среды на окнах, вместо того, чтобы настаивать на том, что pip устанавливает предварительно созданные двоичные файлы? – WineSoaked 19 March 2011 в 18:01
  • 3
    "Правило" компилятор для использования в Windows - это Visual Studio (2008 год я считаю для последних версий Python). Установка этого, даже бесплатная версия, представляет собой проблему. обычный способ установки расширений C в Windows состоит из предварительно скомпилированных двоичных файлов. easy_install поддерживает это, пип не делает. – fuzzyman 23 March 2011 в 11:59
  • 4
    Это основные причины, по которым я все еще использую easy_install. – Randy Syring 12 January 2012 в 21:05
  • 5
    За годы, прошедшие после того, как был приведен вышеприведенный ответ, теперь уже не так, что pip не может устанавливать бинарные пакеты, в Windows или на других платформах. Бинарный формат распределения wheel делает это возможным. Многие сторонние пакеты с модулями расширения C теперь также распространяются как колеса, созданные для различных платформ, и pip может автоматически установить их. См. Например, pythonwheels.com – Ned Deily 3 September 2014 в 20:22

Просто встретил один специальный случай, который мне пришлось использовать easy_install вместо pip, или мне нужно напрямую вытащить исходные коды.

Для пакета GitPython версия в pip слишком стар, это 0.1.7, а последний из easy_install является последним, что является 0.3.2.rc1.

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

easy_install GitPython
2
ответ дан Landys 19 August 2018 в 04:46
поделиться
  • 1
    Я проверил это прямо сейчас (см. Временную метку), и это уже не так: оба pip и easy_install работали одинаково, в результате чего GitPython 0.3.5 сегодня. (Проверено только на OS X Yosemite). Какова ваша платформа? Обновите свою запись, потому что она вводит в заблуждение. – Christian Tismer 18 January 2015 в 21:06

Другой - еще не названный - причина, благоприятствующая pip , заключается в том, что она является новой жарой и будет продолжать использоваться в будущем.

Инфографика ниже - из раздела Current State of Packaging в . Руководство Hitchhiker Guide to Packaging v1.0 - показывает, что setuptools / easy_install пойдет

enter image description here [/g11]

Вот еще одна инфографика из документации distribute , показывающая, что Setuptools и easy_install будет заменен новым распределением горячих и pip . В то время как pip по-прежнему является новой жаркой, Distribute сливается с Setuptools в 2013 году с выпуском Setuptools v0.7 .

enter image description here [/g12]

242
ответ дан Matthew Rankin 19 August 2018 в 04:46
поделиться
  • 1
    Инфографика FTW – WineSoaked 19 March 2011 в 18:00
  • 2
    OTOH, второй график устарел в течение года. дистрибутив достигнет конца жизни и будет заменен distutils2 (который также будет в стандартной библиотеке Python, начиная с 3.3). Базовый установщик с именем pysetup предоставляется как часть или distutils2, и в будущем pip продолжит предоставлять дополнительные функции поверх distutils2. – Éric Araujo 10 October 2011 в 15:58
  • 3
    omg большое спасибо. я несколько раз смешивался с упаковкой python, и мне очень приятно видеть полуавторитетный путь вперед. – aaron 28 December 2011 в 07:36
  • 4
    По состоянию на март 2013 года distribute сливается с setuptools . pip работает. packaging (distutils2) не включен в Python 3.3 . – jfs 29 April 2013 в 02:11
  • 5
    Этот & quot; ответ & quot; настолько устарел, и просто неправильно, что это даже не смешно. – onlynone 24 September 2014 в 17:13

Две причины:

  1. pip предоставляет команду uninstall
  2. , если установка не выполняется посередине, пип оставит вас в чистоте состояние.
164
ответ дан Ned Batchelder 19 August 2018 в 04:46
поделиться
  • 1
    Так что setuptoools теперь. Эмм ... вид. [Д0] pythonhosted.org/setuptools/… – drozzy 2 June 2014 в 16:40

Из введения Ian Bicking в pip :

pip изначально было написано для улучшения easy_install следующими способами:

  • Все пакеты загружаются перед установкой.
  • Уход за предоставлением полезного результата на консоли.
  • Причины действий отслеживаются. Например, если пакет устанавливается, pip отслеживает, почему этот пакет был необходим.
  • Сообщения об ошибках должны быть полезными.
  • Код является относительно кратким и сплоченным, что делает его проще использовать программно.
  • Пакеты не должны устанавливаться как архивы яиц, они могут быть установлены плоскими (сохраняя метаданные яйца).
  • Встроенная поддержка другого контроля версий системы (Git, Mercurial и Bazaar)
  • Удаление пакетов.
  • Простое определение фиксированных наборов требований и надежное воспроизведение набора пакетов.
< / BLOCKQUOTE>
582
ответ дан Sridhar Ratnakumar 19 August 2018 в 04:46
поделиться
  • 1
    «Сообщения об ошибках» Преимущество огромно, особенно для новых пользователей. Простая установка известна тем, что выплескивает десятки из того, что выглядит как фатальные ошибки, только чтобы закончить успешную установку в любом случае, что затрудняет ее использование, пока вы не научитесь игнорировать большинство всего, что он говорит. Пип просто забывает об этом, в первую очередь. – Brandon Rhodes 6 October 2010 в 21:47
  • 2
    @Glyph есть преимущество, использующее easy_install pip над sudo apt-get install python-pip? – Dennis 7 June 2012 в 12:38
  • 3
    Не используйте easy_install за пределами virtualenv в дистрибутивах на основе пакетов: workaround.org/easy-install-debian – Federico 8 July 2012 в 15:25
  • 4
    @Dennis: при использовании sudo apt-get Ubuntu / Debian установит пакеты Python в /usr/lib/python/dist-packages, тогда как sudo pip или sudo easy_install будут установлены в /local/lib/python/site-packages, и, к сожалению, пакеты Debian / Ubuntu часто имеют разные имена, которые не знакомы с. Лучшим решением IMHO является использование virtualenv и pip внутри ваших пакетов. – Mark Mikofski 24 August 2012 в 18:47
  • 5
    Это требует обновления. – drozzy 2 June 2014 в 16:39

UPDATE: setuptools поглотил distribute, а не наоборот, как думали некоторые. setuptools обновлен с последними изменениями distutils и форматом колеса. Следовательно, easy_install и pip теперь более или менее равны.

Источник: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools- и-не распространять или-другое имя

71
ответ дан user3341691 19 August 2018 в 04:46
поделиться
  • 1
    Почему это больше не поддерживается? Ответы настолько устарели! – drozzy 2 June 2014 в 16:38
  • 2
    да, верхние ответы крайне устарели – WKordos 25 July 2014 в 15:21
  • 3
    Следовательно, easy_install и pip более или менее на равной основе теперь Это глупость. easy_install все еще есть то, что было надолго, и пип улучшает его чрезвычайно. easy_install является лишь частью setuptools и, возможно, одним из худших, поэтому pip стремится заменить его. – Piotr Dobrogost 28 September 2015 в 11:56
Другие вопросы по тегам:

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