Допустимо ли и безопасно ли запускать 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 следует избегать, если это абсолютно необходимо.

6 ответов

Решение

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

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

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

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

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

Это приемлемо и безопасно для запуска pip install под sudo?

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

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

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

Вам нужно перейти в папку, в которую вызванный процесс может записать как /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>

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

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

Похоже, ваши разрешения испорчены. Тип chown -R markwalker ~ в Терминал и попробуйте pip снова? Дайте мне знать, если вы отсортированы.

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

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

pip install virtualenvwrapper

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

sudo pip install virtualenvwrapper

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

pip install --user virtualenvwrapper
Другие вопросы по тегам