Вопрос-Ответ

Why does "pip install" inside Python raise a SyntaxError?

Почему "pip install" внутри Python вызывает SyntaxError?

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

>>> pip install selenium
^
SyntaxError: invalid syntax
Переведено автоматически
Ответ 1

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

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

Ответ 2

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

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

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

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

$ pip install XYZ
Ответ 3

Как предположил @ 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 для справки.


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

Было удаленоОБНОВЛЕНИЕ ca. v.18 get_installed_distributions(). Вместо этого вы можете использовать generator 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())
Ответ 4

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

python -m pip install SomePackage

или (если python 2 и python 3 находятся в одной системе):

python3 -m pip install SomePackage

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

python pip