“sudo pip install”仍然是一种破碎的做法吗?

我是Ubuntu的新手,所以请耐心等待。 我使用以下命令安装了pipsudo apt-get -y install python-pip 。 然后我在他们的网站上使用命令安装了NLTK ,即: sudo pip install -U nltk 。 但后来我偶然发现了这个问题 ,说我所做的一切都是“破碎的做法”。 最令我pip深刻的是,使用sudo pip本质上是错误的,并且给予pip太大的力量可能会损坏操作系统文件。 有人可以validation这个说法吗?

注意 – 我只使用了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? 

应该鼓励sudo pip install和其他常见变体sudo -H pip install因为使用root权限来使用pip从PyPI(Python Package Index)安装Python包是一个安全风险。

来自https://stackoverflow.com/a/21056000/486919 (强调我的):

使用sudo运行pip使用sudo运行setup.py 。 换句话说,您以root身份从Internet运行任意Python代码。 如果有人在PyPI上提出恶意项目并进行安装,则会 授予攻击者root权限。 在最近对pip和PyPI进行了一些修复之前,攻击者还可以在中间攻击中运行一个人,在你下载一个值得信赖的项目时注入他们的代码。

正如https://security.stackexchange.com/a/79327/8761所述 ,重要的是要注意任何人都可以将Python包(包括恶意软件包)上传到PyPI。

简而言之,根据最小权限原则,除非你绝对需要,否则不要使用带pip sudo从PyPI安装Python包。 相反,请考虑使用pip install --user (请注意pip install没有sudo也没有额外的flags / options默认为pip install --user当前在Ubuntu上的用户)或虚拟环境(如virtualenv )。 如果你看到人们推荐sudo pipsudo -H pip ,请告诉他们不要。

你必须使用sudo来安装pip 和aptsudo apt install python-pip ),但是如edwinksl的回答所说,你不应该使用sudo来安装pip包,你应该使用pip install --user 来安装您的用户,或使用virtualenv甚至进一步限制包的范围。

Apt从Ubuntu的存储库安装软件包,而pip安装来自PyPi的用户上传的软件包可能是恶意的。

对于更温和的回复:

  1. 你确实总是要sudo apt-get install ... ,这就是该工具的设计工作方式。
  2. 使用sudo [-H]pip install是可能的和可选的,这取决于你想要做什么(因此,“争议”)。

Python的一个格言是“应该有一个 – 最好只有一个 – 明显的方式来做到这一点。” 就像大多数的格言一样,它似乎在每一个可能的机会都被讽刺的欢乐所打破。 (这就是为什么格言存在的原因,我想。)不幸的是,在我最谦卑的看来,Python生态系统包含许多相互冲突的 “硬性和快速”规则,永远不会被打破……除了“yada yada yada”(魔鬼,细节等)。 几乎在所有情况下,这都是由于语言和工具的历史演变(以及当他们想要继续工作时谁想要/需要历史课) – 但也可能是由于Mac / Win /中的差异* Nix平台(例如,Unix / Linux具有类似的心态,但具有几十年成熟的优势。)所以把所有这些“破碎的做法”“天生错误的”货物崇拜者带上一大堆盐。 有些人确实意味着很好。 (其他人只是,嗯,意思是。)

首先,不是基本的“每用户安装”,你几乎总是喜欢virtualenv,因为真的,这可能是你最终需要的。 所以你现在可以从它开始吧。 这是如何做的,确切地说,“取决于”(参见上面的Python格言)。 如果你正在使用Conda(主要用于Mac和Windows),它将使用Conda进行设置。 如果使用“纯”Python [sic] ,它取决于你拥有哪个版本和python utils,但virtualenvwrapper非常方便。

其次,作为“永不sudo”规则的反例,你可能更喜欢sudo -H pip install -U numpy ,这非常好,甚至有利,因为它可以避免下载/重新安装/维护大型图书馆,你只需要/需要一个版本,分别进入每个virtualenv。 大型,流行的框架,如scikit-learn,NumPy,matplotlib,SciPy,pandas等,可以安装一次,完成并在各种环境中重复使用 。 此外,您的本地友好系统管理员可能能够为系统上的每个用户安装这些 – 显然他们也是通过sudo来实现这一点,例如,对于更复杂的安装,例如TensorFlow。

而且,最后,如果您正在安装一些随机的第三方库(Twitter API,文本调整,代码格式化等),那么我完全同意 – 不要通过sudo以root身份安装它。 当然,将其安装为您当前的用户。 但请记住, 您的用户帐户包含所有非常重要的内容 。

添加到这些答案:我不知道Ubuntu,但在Fedora上我能够使用sudo dnf install python3-numpy格式来安装对我有用的MANY包。 这没有不安全的缺点(发行版repo维护者已经validation了包),但也允许你在系统范围内安装。 唯一的缺点是发行版的版本可能会稍微落后于PyPI中的包。

不,这是对的。 我无法validation此声明。 我总是使用sudo -Hpippip只能像apt一样损坏操作系统文件。 当您只想为该用户安装时,不要使用带有pip sudo