Допустимо ли и безопасно запускать 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('rn', '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 84

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.

ваша исходная проблема заключается в том, что 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>

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

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

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

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

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

pip install virtualenvwrapper

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

sudo pip install virtualenvwrapper

Потом, Я успешно установил его с этого:

pip install --user virtualenvwrapper