Почему в установке pip отказано в разрешении, кроме случаев, когда «--user» включен в конце команды? - PullRequest
0 голосов
/ 29 августа 2018

Я использую pip install для установки различных пакетов python на мой терминал Mac OS. Если я не включаю в конце «--user», я постоянно получаю уведомление о том, что «EnvironmentError: [Errno 13] Permission Denied». Однако, если я добавлю в конце --user, я смогу установить пакеты. Однако на других компьютерах Apple, для которых я использую Terminal и Python, у меня нет проблем с установкой пакетов, и мне не нужно добавлять «--user» в конец.

Почему здесь разница? Почему мне нужно включить --user в конец команды pip install для одного ноутбука Mac, но не для других?

1 Ответ

0 голосов
/ 29 августа 2018
  • При активированной виртуальной среде pip install spam пытается установить в пакеты сайта виртуальной среды. Это почти всегда будет где-то у вас есть права на запись.

  • pip install --user spam пытается установить в каталог пользовательских пакетов. Это всегда будет где-то под вашим домашним каталогом, поэтому у вас всегда должны быть права на запись для него.

  • pip install spam пытается установить файлы в каталог site-packages для вашей установки Python. Обычно это не будет в вашем домашнем каталоге (обычно это где-то в /Library), поэтому вы можете иметь или не иметь разрешения на запись.

    • Предустановленный Apple Python не дает вам права на запись для своих пакетов сайта.
      • sudo pip install spam позволит вам игнорировать разрешения при установке от имени пользователя root, хотя при некоторых установках Python это может вызвать другие проблемы.
    • Homebrew, Python.org и Anaconda / Miniconda do дают вам права на запись в их пакеты сайтов, если вы оставите значения по умолчанию в покое.
      • Очевидно, что по умолчанию оставьте в покое, если вы знаете, что делаете.
    • Менее распространенные способы установки (Enthought, сборка из исходного кода, MacPorts и т. Д.), Вам следует прочитать соответствующие документы.

Так что, скорее всего, вы используете сторонний Python и / или активную виртуальную среду на машинах, где работает pip install spam, но вы используете предустановленный Python от Apple на тех, на которых он не работает. т.

Хотя вы могли бы исправить это с помощью sudo, вы, вероятно, не захотите этого по нескольким причинам:

  • В последних версиях macOS предустановленный Apple Python и предустановленные с ним пакеты сильно устарели.
  • Предустановленные пакеты настроены для поддержки устаревших easy_install, а не pip, поэтому их обновление может быть огромной болью.
  • Если вы слишком плохо все перепутаете, вы можете сломать некоторые системные скрипты, от которых зависит ОС.
  • Ваши изменения могут быть отменены обновлением системы MacOS.

Итак, лучшим решением является установка Python Homebrew / Anaconda / Python.org, если вы можете, а также использование виртуальных сред, когда можете, и --user, когда это возможно, когда вы не можете. Любой из этих трех решит вашу проблему, но вы действительно должны сделать все из них.

И затем, если вы случайно попытаетесь установить что-то в пакеты сайтов Apple, вы получите ошибку разрешений, но это хорошо; это означает, что вы на самом деле ничего не меняли, поэтому вам нечего отменять.

...