“sudo pip install”仍然是一种破碎的做法吗?
我是Ubuntu的新手,所以请耐心等待。 我使用以下命令安装了pip
: sudo 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 pip
或sudo -H pip
,请告诉他们不要。
你必须使用sudo
来安装pip 和apt ( sudo apt install python-pip
),但是如edwinksl的回答所说,你不应该使用sudo
来安装pip包,你应该使用pip install --user
来安装您的用户,或使用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 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 -H
和pip
。 pip
只能像apt
一样损坏操作系统文件。 当您只想为该用户安装时,不要使用带有pip
sudo
。