Почему «установка pip» внутри Python вызывает ошибку SyntaxError?


232

Я пытаюсь использовать pip для установки пакета. Я пытаюсь запустить pip installиз оболочки Python, но я получаю SyntaxError. Почему я получаю эту ошибку? Как мне использовать pip для установки пакета?

>>> pip install selenium
              ^
SyntaxError: invalid syntax

Ответы:


298

pip запускается из командной строки, а не интерпретатора Python. Это программа, которая устанавливает модули, поэтому вы можете использовать их из Python. Как только вы установили модуль, вы можете открыть оболочку Python и сделать import selenium.

Оболочка Python - это не командная строка, это интерактивный интерпретатор. Вы вводите в него код Python, а не команды.


2
Спасибо за разъяснения, но я все еще не могу заставить его работать. Где именно это? Это дает мне ошибку «пункт не распознан» (потому что я не тот, режиссер). Он был установлен в \ site-packages, но я искал его и не могу найти ни одного pip.exe
Nacht

25
@Nacht - pipбудет находиться в каталоге scripts вашей установки python, поэтому вы захотите добавить его в свой путь. Добавьте C:\Python32\scriptsк своему PATH. При необходимости измените путь в зависимости от того, где вы его установили.
WKL

3
На самом деле pip.exe в windows - это скрипт на python, как и другие в каталоге / scripts, но в исполняемом файле он включен с интерпретатором python по умолчанию. Открыв pip.exe с помощью 7-zip, вы увидите основные .py импортирующие модули pip, sys и re ... (и там вы найдете ответ, как запустить его в оболочке python) -> pip - обычный модуль Python. Не забывайте, что Windows не была первой платформой, поддерживающей Python, Linux была, и там Python является частью ОС.
Зиднар

1
Я знаю, что я должен был сделать это из командной строки (не командной строки Python). Это было после смены каталога на расположение python.exe, а затем нужно было поместить тип файла в pip3. В моем случае я был после запросов на работу HTTP. А именно: python pip3.exe устанавливает запросы <--- это работало отлично, то же самое повторялось для модуля
pytz

106

Используйте командную строку, а не оболочку Python (DOS, PowerShell в Windows).

C:\Program Files\Python2.7\Scripts> pip install XYZ

Если вы установили Python в PATH, используя последние установщики, вам не нужно находиться в этой папке для запуска pip

Терминал в Mac или Linux

$ pip install XYZ

3
Спасибо, что включили C: ...., помогли мне понять, куда мне нужно перейти, так как вы не можете просто открыть командную строку и набрать pip.
Hammythepig

2
К вашему сведению, я установил Python, который я НЕ установил PATH. Я должен был сделать это вручную, указывая на путь установки в%APPDATA%
UuDdLrLrSs

61

Поскольку @sinoroc предложил правильный способ установки пакета через pip, это использовать отдельный процесс, так как pip может вызвать закрытие потока или может потребовать перезапуска интерпретатора для загрузки нового установленного пакета, так что это правильный способ использования API: subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'SomeProject'])но поскольку Python позволяет чтобы получить доступ к внутреннему API, и вы знаете, что вы используете API для вас, вы можете в любом случае использовать внутренний API, например. если вы создаете собственный менеджер пакетов GUI с альтернативными ресурсами, такими как https://www.lfd.uci.edu/~gohlke/pythonlibs/

Следующее решение - УСТАРЕЛО, вместо понижения предлагайте обновления. см. https://github.com/pypa/pip/issues/7498 для справки.


ОБНОВЛЕНИЕ : Начиная с версии 10.x пипса больше нет get_installed_distributions()или mainметод под import pip вместо использования import pip._internal as pip .

ОБНОВЛЕНИЕ ок. v.18 get_installed_distributions() был удален. Вместо этого вы можете использовать генератор, freezeкак это:

from pip._internal.operations.freeze import freeze

print([package for package in freeze()])

# eg output ['pip==19.0.3']


Если вы хотите использовать pip внутри интерпретатора Python, попробуйте это:

import pip

package_names=['selenium', 'requests'] #packages to install
pip.main(['install'] + package_names + ['--upgrade']) 
# --upgrade to install or update existing packages

Если вам нужно обновить каждый установленный пакет, используйте следующее:

import pip

for i in pip.get_installed_distributions():
    pip.main(['install', i.key, '--upgrade'])

Если вы хотите прекратить установку других пакетов в случае сбоя какой-либо установки, используйте его в один pip.main([])вызов:

import pip

package_names = [i.key for i in pip.get_installed_distributions()]
pip.main(['install'] + package_names + ['--upgrade'])

Примечание . При установке из списка в файл с параметром -r/ --requirementвам НЕ требуется функция open ().

pip.main(['install', '-r', 'filename'])

Предупреждение : некоторые простые параметры --helpмогут привести к остановке интерпретатора Python.

Любопытство: используя его, pip.exeвы все равно используете интерпретатор Python и модуль pip. Если вы распакуете pip.exeили pip3.exeвне зависимости от того, что это Python 2.x или 3.x, внутри будет один и тот же файл __main__.py:

# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

5
Это работает в оболочке Python, поэтому я думаю, что это должен быть принятый ответ.
Франсуа М.

5
Это именно то, что я надеялся найти, когда гуглил эту проблему.
Андрей Бреза

1
Отличный ответ, и он обязательно должен быть включен сюда, но я не согласен с тем, чтобы это был принятый ответ, поскольку пользователь явно пытался заставить работать вездесущий синтаксис "pip install". Поскольку этот синтаксис не будет работать с этим методом, он напрямую не решит эту проблему. Это может быть более полезным, чем принятый ответ, хотя :)
Дан

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

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

53

Чтобы запустить pip в Python 3.x, просто следуйте инструкциям на странице Python : Установка модулей Python .

python -m pip install SomePackage

Обратите внимание, что это запускается из командной строки, а не из оболочки Python (причина синтаксической ошибки в исходном вопросе).


1
Я все еще получаю неверный синтаксис. Я использую IPython на ПК с Windows 10. Есть предположения?
DataGirl

На этой странице есть инструкции по установке IPython: ipython.readthedocs.io/en/stable/install/index.html $ pip install ipython. Предположительно, это будет означать, что $ python -m pip install ipython
Dan

1
Это ничего не говорит о синтаксической ошибке
OneCricketeer

Это уже было покрыто другими ответами, но я добавил это сейчас. Мой ответ был просто дополнением к 3.x.
Дэн

работал для меня на Windows 10 - также посоветовал мне обновить пип в соответствии с предыдущим комментарием :)
Kdean571

2

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

введите описание изображения здесь

Убедитесь, что путь в пипсах добавлен в переменные среды. Для меня путь установки python и pip: ::
Python: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\
pip: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\Scripts
Оба эти пути были добавлены к пути в переменных среды.

Теперь откройте новое окно cmd и введите pip, вы должны увидеть экран, как показано ниже.

введите описание изображения здесь

Сейчас типа pip install <<package-name>>. Здесь я устанавливаю пакет spyder, поэтому мой оператор командной строки будет таким же, как pip install spyderи мой рабочий экран ...

введите описание изображения здесь

и я надеюсь, что мы закончили с этим !!


1
Это не отвечает на вопрос.
sinoroc

0

Вам нужно ввести его в cmd, а не в режиме IDLE. потому что IDLE не является командной строкой, если вы хотите установить что-то из IDLE, введите это

>>>from pip.__main__ import _main as main
>>>main(#args splitted by space in list example:['install', 'requests'])

это вызывает пип, как pip <commands>в терминале. Команды будут разделены пробелами, которые вы там делаете.


Это устаревший ответ по поводу версии 10.0. ImportError: cannot import name mainиспользуя pip v19.0.3
Zydnar

-1

Программно, в настоящее время работает следующее . Я вижу все ответы после 10.0 и все, но ни один из них не является правильным путем для меня. В Kaggle это приложение работает точно

from pip._internal import main as _main

package_names=['pandas'] #packages to install
_main(['install'] + package_names + ['--upgrade']) 

почему не стоит использовать: из пипса .__ main__ import _main?
Matthijs990

-3

Попробуйте обновить пункт с помощью приведенной ниже команды и повторите попытку

python -m pip install -U pip

обновление pip не позволяет ему работать в оболочке python
Matthijs990
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.