2015-11-25 1 views
5

Когда я использую pip, он обычно не работает без sudo. Я часто вижу, что люди используют pip без sudo, так что я делаю неправильно?Почему я не могу делать что-то без sudo, используя Python и pip?

Я читал, что не рекомендуется устанавливать пакеты pip с sudo. Я знаю, что с virtualenv я могу использовать pip без sudo, но для установки virtualenv Мне нужно сначала использовать sudo.

Когда я пытаюсь установить пип без Суда, я получаю:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip' 

При попытке установить колбу с pip3 install flask:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/werkzeug' 
+3

Я предполагаю, что вы используете Linux/Unix/вариант того же самого. Это не способ сделать это. Я предлагаю вам прочитать ['virtualenv'] (http://docs.python-guide.org/en/latest/dev/virtualenvs/). Есть большой шанс, что вы испортите установку системы Python. – Manhattan

+2

В основном 'pip install --user package-name', который помещает ваш пакет в' $ HOME/.local/lib/pythonx.y/site-packages/'. См. Http: // stackoverflow.com/questions/7143077/how-can-i-install-packages-in-my-home-folder-with-pip – gongzhitaao

ответ

6

sudo используется в системах Unix/Linux для выполнения задач в качестве другого пользователя, используя их разрешения, такие как возможность записи в определенные каталоги. Если вы не укажете пользователя эмулировать, например, при запуске

sudo pip install flask 

вы пытаетесь запустить команду в качестве системного администратора, известного как root во многих средах. Вам будет предложено ввести пароль администратора (который может быть вашим собственным, если вы предоставили свои права администратора пользователя), то указанная команда запускает в качестве этого пользователя, что означает, что он имеет доступ на чтение/запись практически по каждому файлу и каталог в системе (есть некоторые исключения, но они в основном являются угловыми и не очень важными здесь). Это означает, что вы должны быть очень осторожным при использовании sudo, как ошибка, как маленький, как единое пространство действительно может натворить: сравнить

sudo rm -rf /usr/local/lib/python3.4/dist-packages/numpy* 

с

sudo rm -rf /usr /local/lib/python3.4/dist-packages/numpy* 

Смотрите, что пространство между /usr и local/? Вы только что начали удалять всю папку /usr, которая содержит большую часть жизненно важных файлов и программ в системе. Надеюсь, у вас есть резервная копия! Теперь это не значит, что вам нужно напугать до смерти sudo, но вы, do, должны иметь здоровое уважение к нему.

Устройства Python имеют системный уровень (да, я знаю, что есть исключения), что означает, что вам необходимо использовать sudo для их модификации, например, при установке сторонних модулей с pip. Если вы запустите

ls -l /usr/local/lib/python3.4 

вы увидите что-то вдоль линий

drwxrwsr-x 125 root 4096 Nov 3 00:40 dist-packages 

показывая, что каталог вы пытаетесь установить, чтобы с pip принадлежит root, поэтому использование sudo является необходимо.

Теперь существует несколько способов обойти это. Если вам это нравится, и не против изменения глобальных пакетов системы, продолжайте использовать sudo с pip (на самом деле вам может понадобиться sudo -H ..., если вы получите небольшое сообщение в желтом в начале о разрешениях в ваш домашний каталог). Все ваши модули будут установлены до /usr/local/lib/python3.4/dist-packages и будут доступны для всех пользователей системы.

Второй вариант заключается в использовании --user вариант Пипа, который создаст lib/python3.4/site-packages иерархию в вашем домашнем каталоге (~) и хранить все установленные модули там, вместе со сценариями в ~/bin (которые вы должны добавить в свой $PATH. Преимущество из этого метода заключается в том, что вам не нужно использовать sudo, поэтому вы не будете случайно перезаписывать зависящие от системы модули, где для других программ требуется выполнение определенных версий. Недостаток заключается в том, что установленные модули доступны только вам , так что вы может столкнуться с проблемами, если, например, ваш веб-сервер пытается запустить Flask как сам и не может читать исходные файлы. Однако t Нет ничего плохого в том, что небольшое редактирование файла config не может исправить. Это мое рекомендуемое решение для большинства пользователей.

Третий вариант - использовать виртуальные среды, такие как virtualenv. Это создаст пользовательскую установку Python в выбранном вами месте с отдельнымиpython исполняемым файлом и site-packages иерархией (есть варианты того, хотите ли вы ссылаться на или использовать репозиторий dist-packages). Вы можете сделать pip install пакеты непосредственно в virtualenv и сделать так много окружений, как ваши маленькие сердечные пожелания, каждый из которых имеет несколько разные версии различных зависимостей, например, чтобы вы могли более эффективно тестировать свои программы. Вы можете включить и выключить виртуальные среды, например, например, вы могли бы использовать пару на разных вкладках терминала, например, параллельно тестировать. Это моя вторая рекомендация, потому что есть (немного) больше работы, связанной с активацией и использованием среды, и вы можете запутаться в том, над чем работаете, если не очень хорошо их именовать. Недостатки включают отсутствие доступности в системе, как и второй вариант, и тот факт, что виртуальную среду необходимо активировать вручную перед использованием.

Итак, взгляните на варианты и посмотрите, что лучше всего подходит для вашей системы и вашей конкретной ситуации. Удачи!

+0

Отличное объяснение, очень полезно и легко понять. Большое спасибо. –

8

Причина заключается в том, что ваш обычный пользователь не имеет разрешений, необходимых для изменения системных каталогов. Так же, как в этом сообщении:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip' 

Вот краткое изложение того, что вы должны знать:

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

Вы можете установить библиотеки python в свой домашний каталог без использования sudo, но только вы (а не другие пользователи системы) сможете его использовать. Сделайте это с pip install --user package-name, как упомянуто gongzhitaao.

Вы также можете создавать уникальные установки python в каталоге по вашему выбору, например, The Laughing Man. Это называется virtualenv, и я думаю, что это самый предпочтительный способ работы.

+0

Большое спасибо за помощь! Я понял. –

 Смежные вопросы

  • Нет связанных вопросов^_^