Я новичок в Ubuntu, поэтому, пожалуйста, потерпите меня. Я установил с pip
помощью этой команды: sudo apt-get -y install python-pip
. Затем я установил NLTK используя команду на своем веб - сайте, который был: sudo pip install -U nltk
. Но потом я наткнулся на этот вопрос, который говорит, что все, что я делал, было «нарушенной практикой». Больше всего меня поразило, что использование sudo pip
по своей сути неправильно и что pip
слишком большое усилие может повредить файлы операционной системы. Кто-нибудь может подтвердить это утверждение?
Примечание - я использовал только sudo
потому, что когда я попробовал команду, apt-get -y install python-pip
это дало мне 2 ошибки:
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
package-management
permissions
python
pip
что что что
источник
источник
sudo pip install
по своей сути неверны. - от stackoverflow.com/a/33004920/95735sudo pip install
это так же плохо, какcurl "some-url" | sudo bash
устанавливает. Точно так же у нас было несколько раз, когда какой-то разработчикsudo pip install
устанавливал некоторую зависимость на свою рабочую станцию, а затем проверял в репозитории неработающий код, потому что в файлеrequirements.txt
orsetup.py
отсутствовало то, что они установили, и все остальные должны были выяснить, какая зависимость нужна пока парень был в отпуске.Ответы:
Как
sudo pip install
и его другой общий вариантsudo -H pip install
следует не поощрять , потому что это риск для безопасности использования привилегий суперпользователя использоватьpip
для установки пакетов Python из PyPI (Python Index Package).С https://stackoverflow.com/a/21056000/486919 (выделено мое):
Как упоминалось на https://security.stackexchange.com/a/79327/8761 , важно отметить, что любой может загрузить пакеты Python, в том числе вредоносные, в PyPI.
Короче говоря, в соответствии с принципом наименьших привилегий , не используйте
sudo
withpip
для установки пакетов Python из PyPI, если в этом нет крайней необходимости. Вместо этого рассмотрите возможность использованияpip install --user
(обратите внимание, что в настоящее время в Ubuntupip install
нетsudo
ни дополнительных, ни дополнительных флагов / параметров по умолчаниюpip install --user
) или виртуальных сред (например,virtualenv
). Если вы видите, что люди рекомендуютsudo pip
илиsudo -H pip
, пожалуйста, скажите им не делать этого.источник
sudo pip install
может удалить «старые» установленные Python пакеты, установленные системой, что может затруднить обновление или удаление этих пакетов ОС.sudo pip uninstall
здесь не помогает, потому что он удаляет новый пакет, но не восстанавливает файлы из старого. (Мой коллега Р. Загар более подробно описывает другой ответ.)Вы должны использовать
sudo
для установки pip с помощью apt (sudo apt install python-pip
), но, как указано в ответе edwinksl, вы не должны использовать егоsudo
для установки пакетов с помощью pip , вы должны использовать егоpip install --user <package>
для установки только для своего пользователя или использовать virtualenv для еще большего ограничения области действия пакета. ,Apt устанавливает пакеты из репозиториев Ubuntu, тогда как pip устанавливает загруженные пользователем пакеты из PyPi, которые могут быть вредоносными.
источник
И для более сдержанного ответа:
sudo apt-get install ...
, так как инструмент был разработан для работы.sudo [-H]
сpip install
возможно и необязательно, в зависимости от того, что именно вы хотите сделать (и, следовательно, «противоречие»).Один из девизов языка Python является «Там должно быть одно-- и предпочтительно только один --obvious способ сделать это.» И, как и большинство девизов, он с сардоническим ликованием ломается, казалось бы, при любой возможности. (Вот почему, я думаю, существуют девизы.) К сожалению, по моему наиболее скромному мнению, экосистема Python состоит из множества противоречивых «жестких и быстрых» правил, которые никогда не нарушаются ... за исключением случаев, когда «yada yada yada» (дьявол, детали и т. д.). Почти во всех случаях это связано с исторической эволюцией языка и инструментов (и тем, кто хочет / нуждается в уроке истории, когда они просто хотят продолжить свою работу) - но также может быть связано с различиями в Mac / Win / * Платформы Nix (например, Unix / Linux имеет похожий менталитет,принять всю эту «сломанную практику» и «по своей сути неправильно» груз-культистов с огромной щепоткой соли. Некоторые действительно имеют в виду хорошо. (Другие просто, ну, подлые.)
Прежде всего, вместо базовых «установок для каждого пользователя», вы почти всегда предпочитаете virtualenv, потому что на самом деле это то, что вам в конечном итоге понадобится. Так что вы можете начать с этого сейчас. Как именно это делается, именно «зависит» (см. Девиз Python выше). Если вы используете Conda (в основном для Mac и Windows), он будет настроен с использованием Conda . Если вы используете «чистый» Python [sic] , это зависит от того, какая версия и какая у вас версия Python, но virtualenvwrapper довольно удобен.
Во-вторых, в качестве контрпримера к правилу «никогда не судо», вы можете предпочесть
sudo -H pip install -U numpy
, что совершенно нормально, даже выгодно, так как позволяет избежать загрузки / переустановки / обслуживания больших библиотек, где вы хотите только / нужна одна версия, в каждом virtualenv отдельно. Большие, популярные фреймворки, такие как scikit-learn, NumPy, matplotlib, SciPy, pandas и т. Д., Могут быть установлены один раз и готовы для повторного использования в различных средах . Кроме того, ваш местный дружественный системный администратор может установить их для каждого пользователя в системе - и, очевидно, они будут делать этоsudo
также, например, для более сложных установок, таких как TensorFlow.И, наконец, если вы устанавливаете какую-то случайную стороннюю библиотеку, которая делает то-то и то-то (API Twitter, манипулирование текстом, форматирование кода и т. Д.), То я полностью согласен - не устанавливайте ее как root с помощью sudo. Конечно, установите его в качестве текущего пользователя. Но помните, в вашей учетной записи есть все ваши действительно важные вещи .
источник
malloc
там, где вам не нужно.--user
Флаг делает то , что ОП просили и не требует никаких специальных разрешений. В процессе вы подрываете свои хорошие качества в отношении virtualenv ... в этом нет ничего "грубо-культистского".Использование «sudo pip install» может и перезапишет содержимое Python, предоставленное поставщиком вашей ОС. Когда это происходит, любые пакеты поставщиков, затронутые этим, не будут проходить «rpm --verify», и ваши пакеты будут выглядеть поврежденными.
Вы хотите использовать инструменты системного администрирования, которые протестировал ваш поставщик ОС , или можно использовать непроверенные компоненты, которые вы скачали из Интернета?
Когда, если не, вредоносный пакет загружается в PyPI ... люди, использующие "sudo pip install", в конечном итоге запустят эту вредоносную нагрузку с полными системными привилегиями. Ты хочешь это? (#Principleofleastprivilege)
Если это всего лишь ваш ноутбук, и вы рискуете только несколькими изображениями кошек, тогда риск, вероятно, низкий ... но если это многопользовательская система, то риск теперь умножается на N. Если у вас есть данные на система, которая имеет ценность, или доступность или надежность системы имеют ценность, тогда риски также возрастают.
Пожалуйста, не стесняйтесь выбирать свое собственное приключение, но, пожалуйста, получите информированное согласие других пользователей, которые могут быть затронуты вашим выбором. Они могут не чувствовать себя с таким же уровнем риска, как вы.
источник
Чтобы добавить к этим ответам: я не знаю об Ubuntu, но в Fedora я могу использовать
sudo dnf install python3-numpy
формат для установки МНОГИХ полезных для меня пакетов. Это не имеет недостатка в том, что оно небезопасно (сопровождающий дистрибутивного репозитория имеет проверенные пакеты), но также позволяет устанавливать в масштабе всей системы. Единственным недостатком является то, что версии дистрибутива репо могут немного отставать от пакетов в PyPI.источник
Нет, это правильно. Я не могу подтвердить это утверждение. Я всегда использую
sudo -H
сpip
.pip
может только повредить файлы операционной системыapt
. Только не используйтеsudo
с,pip
когда вы хотите установить только для этого пользователя.источник
pip
масштабе всей системы? Если вы системный администратор, возможно, это другая история.