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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Многие из ответов здесь устарели до 2015 года (хотя изначально принятого ответа от Даниэля Розмана нет). Вот текущее состояние вещей:
.whl
файлы) - не только на PyPI, но и в сторонних репозиториях, таких как Расширительные пакеты Christoph Gohlke для Windows . pip
может обрабатывать колеса; easy_install
не может. 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
включена по умолчанию, если вы строите из исходного кода . 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
, если хотите его обновить.
В дополнение к ответу fuzzyman:
pip не будет устанавливать бинарные пакеты и не будет хорошо протестирован в Windows.
Поскольку Windows не поставляется с компилятор по умолчанию часто не может быть использован там. easy_install может устанавливать бинарные пакеты для Windows.
blockquote>Вот трюк в 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
Я спрошу в списке рассылки, что планируется для этого.
blockquote>Вот последние update:
Новый поддерживаемый способ установки двоичных файлов будет
wheel
! Это еще не стандарт, но почти. Текущая версия по-прежнему является альфа: 1.0.0a1https://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
.
ТРЕБОВАНИЯ файлы.
Серьезно, я использую это совместно с 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
Каждый раз, когда вы можете автоматизировать скуку, как это является удивительным.
pip не будет устанавливать бинарные пакеты и не будет хорошо протестирован в Windows.
Поскольку Windows не поставляется с компилятором по умолчанию, пип часто не может использован там. easy_install может устанавливать бинарные пакеты для 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
Другой - еще не названный - причина, благоприятствующая pip , заключается в том, что она является новой жарой и будет продолжать использоваться в будущем.
Инфографика ниже - из раздела Current State of Packaging в . Руководство Hitchhiker Guide to Packaging v1.0 - показывает, что setuptools / easy_install пойдет
[/g11]
Вот еще одна инфографика из документации distribute , показывающая, что Setuptools и easy_install будет заменен новым распределением горячих и pip . В то время как pip по-прежнему является новой жаркой, Distribute сливается с Setuptools в 2013 году с выпуском Setuptools v0.7 .
[/g12]
distribute
сливается с setuptools
. pip
работает. packaging
(distutils2
) не включен в Python 3.3 .
– jfs
29 April 2013 в 02:11
Две причины:
uninstall
Из введения Ian Bicking в pip :
pip изначально было написано для улучшения easy_install следующими способами:
< / BLOCKQUOTE>
- Все пакеты загружаются перед установкой.
- Уход за предоставлением полезного результата на консоли.
- Причины действий отслеживаются. Например, если пакет устанавливается, pip отслеживает, почему этот пакет был необходим.
- Сообщения об ошибках должны быть полезными.
- Код является относительно кратким и сплоченным, что делает его проще использовать программно.
- Пакеты не должны устанавливаться как архивы яиц, они могут быть установлены плоскими (сохраняя метаданные яйца).
- Встроенная поддержка другого контроля версий системы (Git, Mercurial и Bazaar)
- Удаление пакетов.
- Простое определение фиксированных наборов требований и надежное воспроизведение набора пакетов.
easy_install pip
над sudo apt-get install python-pip
?
– Dennis
7 June 2012 в 12:38
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
UPDATE: setuptools
поглотил distribute
, а не наоборот, как думали некоторые. setuptools
обновлен с последними изменениями distutils
и форматом колеса. Следовательно, easy_install
и pip
теперь более или менее равны.
Источник: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools- и-не распространять или-другое имя
easy_install
все еще есть то, что было надолго, и пип улучшает его чрезвычайно. easy_install
является лишь частью setuptools
и, возможно, одним из худших, поэтому pip стремится заменить его.
– Piotr Dobrogost
28 September 2015 в 11:56
pip
за прошедшее время. – abarnert 26 May 2015 в 00:44easy_install -U pip
илиeasy_install3 -U pip
. – analytik 28 July 2016 в 09:43easy_install
& quot; Это был не мой опыт, хотя я не пробовал в то время, так как сейчас доминируют колеса. Но бинарные файлы Кристофа Гольке раньше распространялись как исполняемые яйца. Вызовeasy_install
на них был only i>, я мог бы установить эти пакеты в виртуальную среду, и это никогда не вызывало у меня изжоги. Каким образомeasy_install
больше не работает с виртуальными envs? – jpmc26 10 May 2018 в 11:44