Допустимо ли и безопасно ли запускать pip install в sudo?

Я начал использовать свой Mac для установки пакетов Python так же, как и на моем ПК под управлением Windows; однако на моем Mac я сталкивался с частым разрешением на отклонения ошибок при записи в файлы журнала или на сайты-пакеты.

Поэтому я думал о запуске pip install <package> в sudo но это безопасное/приемлемое использование sudo, поскольку я просто хочу, чтобы это было установлено под моей учетной записью текущего пользователя?

Пример трассировки из ошибки ввода-вывода журнала:

Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
    return command.main(args[1:], options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
    log_fp = open_logfile(log_fn, 'w')
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
    log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

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

Ответ 1

Используйте виртуальную среду:

$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want

Вы используете только sudo или повышенные разрешения, когда хотите установить материал для глобальной, общесистемной установки Python.

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

В качестве бонуса, virtualenv не требует повышенных разрешений.

Ответ 2

Допустимо ли и безопасно запускать pip install под sudo?

Это не безопасно, и на него нахмурились - см. Каковы риски запуска "sudo pip" ? Чтобы установить пакет Python в домашний каталог, вам не нужны привилегии root. См. описание параметра --user для пипа.

Ответ 3

Ваша первоначальная проблема заключается в том, что pip не может записывать журналы в папку.

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

Вам нужно записать cd в папку, в которой вызванный процесс может написать как /tmp поэтому cd/tmp и повторная вызов команды, вероятно, будут работать, но это не то, что вы хотите.

НО фактически для этого конкретного случая (вы не хотите использовать sudo для установки пакетов python), и нет необходимости в глобальных установках пакетов, вы можете использовать флаг --user следующим образом:

pip install --user <packagename>

и все будет хорошо.

Я предполагаю, что у вас есть одна пользовательская установка python python и вы не хотите беспокоиться о чтении о virtualenv (что не очень удобно) или pipenv.

Как некоторые люди в разделе комментариев указали, что следующий подход - не очень хорошая идея, если вы не знаете, что делать и застряли:

Другой подход для глобальных пакетов, например, в вашем случае, вы хотите сделать что-то вроде:

chown -R $USER /Library/Python/2.7/site-packages/

или в целом

chown -R $USER <path to your global pip packages>

Ответ 4

Поскольку у меня была та же проблема, я хочу подчеркнуть, что на самом деле первый комментарий Брайана Каина является решением проблемы "IOError: [Errno 13]" - проблема:

Если выполняется в каталоге temp (cd /tmp), IOError больше не встречается, если я запускаю sudo pip install foo.

Ответ 5

Похоже, ваши права перепутаны. Введите chown -R markwalker ~ в терминал и повторите попытку pip? Сообщите мне, если вы отсортированы.

Ответ 6

У меня возникла проблема с установкой virtualenvwrapper после успешной установки virtualenv.

Мой терминал пожаловался, когда я это сделал:

pip install virtualenvwrapper

Итак, я безуспешно пробовал это (НЕ РЕКОМЕНДУЕТСЯ):

sudo pip install virtualenvwrapper

Затем я успешно установил его с помощью этого:

pip install --user virtualenvwrapper