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