pip или pip3 для установки пакетов для Python 3?

121

У меня Macbook с OS X El Captain. Я думаю, что это Python 2.7предустановлено на нем. Однако я Python 3.5тоже установил . Когда я начал использовать Python 3, я прочитал, что если я хочу установить пакет, я должен ввести:

pip3 install some_package

Во всяком случае, теперь, когда я использую

pip install some_package

Меня some_packageустановили на Python 3. То есть я могу импортировать его и использовать без проблем. Более того, когда я печатаю только pip3в Terminal, я получил сообщение об использовании:

Usage:   
  pip <command> [options]

такое же сообщение я получаю, когда просто печатаю pip.

Означает ли это , что в Previos версии, все было иначе, и теперь , pipи pip3могут быть использованы как взаимозаменяемые? Если да, то как я могу установить пакеты Python 2вместо Python 3?

Аммар Алюсфи
источник

Ответы:

75

Ваша pipмягкая ссылка на тот же путь к исполняемому файлу с pip3. вы можете использовать приведенные ниже команды, чтобы проверить, где находятся ваш pipи pip3настоящий путь:

$ ls -l `which pip`
$ ls -l `which pip3`

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

$ pip show pip
$ pip3 show pip

Когда мы устанавливаем разные версии python, мы можем создавать такие программные ссылки на

  • установить по умолчанию для некоторой версии.
  • делать разные ссылки для разных версий.

Это та же ситуация с python, python2,python3

Дополнительная информация ниже, если вам интересно, как это происходит в разных случаях:

ПСИ
источник
1
Я считаю это неправильным. Мой pip3 также называет себя просто pip в выводе справки, тем не менее, простой pip устанавливает пакеты Python 2 в мою систему. Я думаю, что stackoverflow.com/a/40832677/188108 верен, по крайней мере, он согласуется с моими наблюдениями.
Торстен Бронгер 02
он меняется в зависимости от того, в какой среде и как вы устанавливаете python, этот ответ должен дать подсказку, как узнать, работает ли pip, и ответить на ситуацию спрашивающего. Если это не так в вашей системе, вы все равно можете использовать тот же способ, чтобы выяснить, почему. не значит, что это неправильный ответ.
CSJ
1
Сомневаюсь. У меня нет Mac, но в тестируемых мной вариантах Ubuntu варианты pip не являются символическими ссылками. Вместо этого это крошечные скрипты Python, которые отличаются только строкой shebang.
Торстен Бронгер 03
да, это то, что я имею в виду, это меняется в среде и в способе установки python (brew, apt, pyenv, компилировать вручную и т. д.), а в ситуации опрашивающего это потому, что это мягкие ссылки, и мы используем ls -lи pip showпроверяем причину. и, конечно же, этот ответ должен ответить на его вопрос.
CSJ
Я не думаю, что на компьютере спрашивающего были символические ссылки. Я не нахожу никаких ссылок на то, что pip когда-либо работал / работает таким образом.
Торстен Бронгер 03
26

Если у вас был python 2.x, а затем установлен python3, ваш пип будет указывать на pip3. вы можете проверить это, набрав, pip --versionчто будет таким же, как pip3 --version.

В вашей системе теперь есть pip, pip2 и pip3 .

Если вы хотите, вы можете изменить pip так, чтобы он указывал на pip2 вместо pip3.

Apadana
источник
1
Как вы это измените?
anbizcad
3
@ahnbizcad Самый простой способ - определить такой псевдоним: alias pip = "pip3"
apadana
2
Я сделал это, но мой pip3 был v9, когда pip был v10, поэтому я набрал, pip3 install --upgrade pipи он сделал оба v10
Кевин Даниковски
2
Это неверный ответ. pip не будет указывать на pip3. pip установит пакеты Python 2, а pip3 установит пакеты Python 3. Проверено на Lubuntu 18.10.
Торстен Бронгер 02
@TorstenBronger, каков был порядок установки Python в вашей среде?
Apadana
14

При установке python3, pip3инсталлируется. И если у вас нет другой установки python (например, python2.7), создается ссылка, указывающая pipна pip3.

Так pipэто ссылка на,pip3 если не установлена ​​другая версия python (кроме python3). pipвообще указывает на первую установку.

Ани Менон
источник
7

Это непростая тема. В конце концов, если вы вызовете, pipон вызовет либо pip2или pip3, в зависимости от того, как вы настроили свою систему.

Макс Уппенкамп
источник
6

По иллюстрации:

pip --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

pip3 --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

python --version
  Python 3.7.3

which python
  /usr/bin/python

ls -l '/usr/bin/python'
  lrwxrwxrwx 1 root root 7 Mar 26 14:43 /usr/bin/python -> python3

which python3
  /usr/bin/python3

ls -l /usr/bin/python3
  lrwxrwxrwx 1 root root 9 Mar 26 14:43 /usr/bin/python3 -> python3.7

ls -l /usr/bin/python3.7
  -rwxr-xr-x 2 root root 14120 Mar 26 14:43 /usr/bin/python3.7

Таким образом, мой системный Python по умолчанию (Python 3.7.3) pip - это pip3 .

Виктория Стюарт
источник
5

Думаю pip, pip2и pip3это не софт-ссылки на один и тот же путь к исполняемому файлу. Обратите внимание на эти команды и результаты в моем Linux-терминале:

mrz@mrz-pc ~ $ ls -l `which pip`
-rwxr-xr-x 1 root root 292 Nov 10  2016 /usr/bin/pip
mrz@mrz-pc ~ $ ls -l `which pip2`
-rwxr-xr-x 1 root root 283 Nov 10  2016 /usr/bin/pip2
mrz@mrz-pc ~ $ ls -l `which pip3`
-rwxr-xr-x 1 root root 293 Nov 10  2016 /usr/bin/pip3
mrz@mrz-pc ~ $ pip -V
pip 9.0.1 from /home/mrz/.local/lib/python2.7/site-packages (python 2.7)
mrz@mrz-pc ~ $ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
mrz@mrz-pc ~ $ pip3 -V
pip 9.0.1 from /home/mrz/.local/lib/python3.5/site-packages (python 3.5)

Как видите, они существуют разными путями.

pip3 всегда работает только в среде Python3, как и pip2 с Python2. pip работает с той средой, которая соответствует контексту. Например, если вы используете venv Python3, pip будет работать в среде Python3.

Мохаммад Реза
источник
Я бы сказал, что утверждение, что pip связан с любой средой, подходящей для контекста, немного сбивает с толку. В случае venv исполняемый файл pip специфичен для venv, а не для системы. Если вы не установили несколько версий python в один и тот же venv, я не вижу здесь этой проблемы. Когда не используется venv, используемая версия pip иногда не интуитивно понятна и зависит от конфигурации вашей системы (часто это определяется тем, какая версия python была установлена ​​первой, как говорили другие). Но у Пипа нет никакого интеллекта, который он использует для динамического выбора версии
Люк Бауманн
3

Если вы установили Python 2.7, я думаю, вы могли бы использовать pip2и pip2.7для установки пакетов специально для Python 2, например

pip2 install some_pacakge

или

pip2.7 install some_package

И вы можете использовать pip3или pip3.5установить пакеты специально для Python 3.

mikeqfu
источник
1

В моем экземпляре Windows - а я не совсем понимаю свою среду - использование pip3 для установки пакета kaggle-cli сработало, тогда как pip - нет. Я работал в среде conda, и среды кажутся другими.

(fastai) C: \ Users \ redact \ Downloads \ fast.ai \ deeplearning1 \ nbs> pip --version

pip 9.0.1 из C: \ ProgramData \ Anaconda3 \ envs \ fastai \ lib \ site-packages (python 3.6)

(fastai) C: \ Users \ redact \ Downloads \ fast.ai \ deeplearning1 \ nbs> pip3 --version

pip 9.0.1 из c: \ users \ redact \ appdata \ local \ programs \ python \ python36 \ lib \ site-packages (python 3.6)

ВЕЧЕРА
источник
0

Учитывая активированный Python 3.6 virtualenv в somepath / venv , следующие псевдонимы разрешили различные проблемы в macOS Sierra, где pip настаивал на указании на Python 2.7 от Apple.

alias pip='python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

Это не сработало так хорошо, когда мне приходилось делать это, sudo pipпоскольку пользователь root ничего не знает о моем псевдониме или virtualenv, поэтому мне пришлось добавить дополнительный псевдоним, чтобы справиться с этим. Это хакер, но он работает, и я знаю, что он делает:

alias sudopip='sudo somepath/venv/bin/python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

задний план:

pip3 не существует для запуска ( команда не найдена ) и which pipвернет /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip , Apple Python.

Python 3.6 был установлен через macports.

После активации версии 3.6 virtualenv, с которой я хотел работать, which pythonвернет somepath / venv / bin / python

Каким-то образом pip installпоступил бы правильно и поразил мой virtualenv, но pip listне выдержал бы пакетов Python 2.7.

Для Python это намного ниже моих ожиданий с точки зрения удобства для начинающих.

JL Peyret
источник