pip vs python -m pip, почему команда pip выбрасывает объект модуля, не вызывает ошибку - PullRequest
4 голосов
/ 31 октября 2019

Я видел похожие посты, такие как

pip install против python3 -m pip install

, которые на самом деле не решают эту проблему. Я новичок в Python, просто следую базовому учебнику по Python 3, где упоминается pip как менеджер зависимостей, и они упоминают, что он должен использоваться как pip install dependency_here

Я использую Python 3.8.0, совершенно новыйустановить в Windows (для всех пользователей, чтобы он был установлен под C:\Program Files (x86)\Python38-32)

, и я не могу запустить команду pip. Я получаю ошибку модуля, о которой не знаю.

$ pip --version
Traceback (most recent call last):
  File "c:\program files (x86)\python38-32\lib\runpy.py", line 192, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\program files (x86)\python38-32\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Program Files (x86)\Python38-32\Scripts\pip.exe\__main__.py", line 9, in <module>
TypeError: 'module' object is not callable

Однако я могу использовать команду python -m pip

$ python -m pip --version
pip 19.3.1 from C:\Users\iberodev\AppData\Roaming\Python\Python38\site-packages\pip (python 3.8)

и устанавливать с ней модули.

Вопрос в том, почему я не могу использовать команду, о которой упоминает большинство учебных пособий, и даже официальный репозиторий pip использует для примеров: https://pypi.org/project/Flask/#Installing

Я хотел бы знатьпочему у меня такая ошибка. , поскольку она не так часто встречается

Спасибо!

ОБНОВЛЕНИЕ 1 (2 ноября 2019 г.): благодаря найденному ответуПУТЬ для пользователя и системы была немного беспорядочной. Я решил очистить его и переустановить Python 3.8.0 64-битную версию, и теперь все выглядит хорошо:

$ python --version
Python 3.8.0

И pip

$ pip --version
pip 19.2.3 from c:\users\iberodev\appdata\local\programs\python\python38\lib\site-packages\pip (python 3.8)

и PATH

$ echo $PATH | tr \: \\n | grep "Python"
/c/Users/iberodev/AppData/Local/Programs/Python/Python38/Scripts
/c/Users/iberodev/AppData/Local/Programs/Python/Python38

1 Ответ

2 голосов
/ 31 октября 2019

Проверьте переменную окружения path. Существует path для текущего пользователя (без повышенных прав, переменных среды пользователя) и path для системы (с повышенными правами, переменных среды системы). Теперь, чтобы вызвать pip без использования его в качестве метода python (python -m pip),

  • ваш path должен включать запись, указывающую на папку Scripts из вашей установки Python (иконечно запись, указывающая на папку, которая содержит python.exe). Это верно для любой установки, которую вы хотите использовать (пользователь или система).
  • , если вы хотите вызвать pip из системной установки Python, чтобы добавить пакеты в этой установки , вы 'Вам нужно будет вызвать его из командной строки с повышенными правами (аналогично использованию sudo в Linux).

Я подозреваю, что второй момент заключается в том, что является причиной ошибки, которую вы получили.

Не совсем уверен, кто создает \AppData\Roaming\Python\Python38\site-packages, но это не то, где вы найдете Pythonустановка . * Пользовательская установка Python будет расположена в \AppData\Local\Programs\Python. Вероятно, папка AppData\Roaming\... используется pip (вне системной установки), когда вызывается без повышенных прав для установки пакетов.

В принципе, я бы предложил, чтобы на Python была установлена ​​только пользовательская установкаWindows 10. Для большинства приложений вам не понадобится установка системы. И я бы предпочел использовать 64-битную версию. Но это зависит от того, что вы собираетесь делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...