Является ли `sudo pip install` все еще сломанной практикой?
Я новичок в 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?
5 ответов
И то и другое sudo pip install
и его другой общий вариант sudo -H pip install
не следует поощрять, поскольку использование привилегий суперпользователя является угрозой безопасности. pip
установить пакеты Python из PyPI (индекс пакетов Python).
С https://stackoverflow.com/a/21056000/486919 (выделено мое):
Когда ты бежишь
pip
сsudo
, ты бежишьsetup.py
сsudo
, Другими словами, вы запускаете произвольный код Python из Интернета от имени пользователя root. Если кто-то запускает вредоносный проект в PyPI и вы устанавливаете его, вы предоставляете злоумышленнику root-доступ к своей машине. До некоторых недавних исправленийpip
и PyPI, злоумышленник также может запустить человека в середине атаки, чтобы внедрить свой код при загрузке заслуживающего доверия проекта.
Как упоминалось по адресу /questions/589335/kak-ubuntu-otslezhivaet-progress-dlya-200-millionov-polzovatelej/589336#589336, важно отметить, что любой может загрузить пакеты Python, включая вредоносные, в PyPI.
Короче говоря, в соответствии с принципом наименьших привилегий, не используйте sudo
с pip
устанавливать пакеты Python из PyPI, если вам это абсолютно не нужно. Вместо этого рассмотрите возможность использования pip install --user
(Обратите внимание, что pip install
без sudo
ни дополнительные флаги / опции по умолчанию pip install --user
в Ubuntu в настоящее время) или виртуальные среды (такие как virtualenv
). Если вы видите людей, рекомендующих sudo pip
или же sudo -H pip
пожалуйста, скажите им, чтобы не
Вы должны использовать 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: "Должен быть один - и желательно только один - очевидный способ сделать это". И, как и большинство девизов, он с сардоническим ликованием ломается, казалось бы, при любой возможности. (Вот почему, я думаю, существуют девизы.) К сожалению, по моему наиболее скромному мнению, экосистема 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. Конечно, установите его в качестве текущего пользователя. Но помните, в вашей учетной записи есть все ваши действительно важные вещи.
Использование "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
когда вы хотите установить только для этого пользователя.