wha*_*hat 52 package-management permissions python pip
我是 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?
Run Code Online (Sandbox Code Playgroud)
edw*_*ksl 75
无论sudo pip install和它的其他常见变异sudo -H pip install应该不被鼓励,因为它是一个安全风险使用root权限来使用pip,以一封来自PyPI(Python包索引)安装Python包。
来自/sf/answers/1473920031/(强调我的):
当您运行
pip使用sudo,运行setup.py使用sudo。换句话说,您以 root 身份从 Internet 运行任意 Python 代码。 如果有人在 PyPI 上放置了一个恶意项目并且你安装了它,你 就给了攻击者对你的机器的 root 访问权限。在最近对pipPyPI进行一些修复之前,攻击者还可以在您下载可信赖的项目时运行中间人攻击来注入他们的代码。
如https://security.stackexchange.com/a/79327/8761 所述,重要的是要注意任何人都可以将 Python 包(包括恶意包)上传到 PyPI。
总之,按照最小权限原则,除非绝对需要,否则不要使用sudowithpip从 PyPI 安装 Python 包。相反,请考虑使用pip install --user(请注意,目前在 Ubuntu 上pip install没有sudo或附加标志/选项默认为pip install --user)或虚拟环境(例如virtualenv)。如果您看到有人推荐sudo pip或sudo -H pip,请告诉他们不要。
piz*_*184 24
您必须使用sudo安装PIP使用apt(sudo apt install python-pip),但在规定edwinksl的答案你不应该使用sudo安装软件包与点子,你应该使用pip install --user <package>只安装您的用户,或使用的virtualenv,以进一步限制包的范围.
Apt 从 Ubuntu 的存储库安装软件包,而 pip 从 PyPi 安装用户上传的可能是恶意的软件包。
对于更温和的答复:
sudo apt-get install ...,这正是该工具设计的工作方式。sudo [-H]withpip install是可能的和可选的,这取决于您究竟想要做什么(因此,“争议”)。其中一个Python的座右铭是“应该有one--和最好只有一个--obvious办法做到这一点。” 和大多数座右铭一样,它似乎在每一个可能的机会都被讽刺的欢乐所打破。(这就是格言存在的原因,我猜。)不幸的是,在我最谦虚的意见中,Python 生态系统由许多相互冲突的“硬性和快速”规则组成,永远不会被打破......除了“yada yada yada”(魔鬼,详情等)。在几乎所有情况下,这是由于语言和工具的历史演变(以及当他们只想继续工作时想要/需要历史课)——但也可能是由于 Mac/Win/ * Nix 平台(例如,Unix/Linux 有类似的心态,一定要把所有这些“错误的做法”和“本质上是错误的”货物崇拜者带上一大撮盐。有些确实是善意的。(其他人只是,好吧,卑鄙。)
首先,与基本的“每用户安装”相比,您几乎总是更喜欢 virtualenv,因为实际上,这可能是您最终需要的。所以你不妨现在就开始。这是如何完成的,确切地说,“取决于”(参见上面的 Python 座右铭)。如果您使用的是 Conda(主要用于 Mac 和 Windows),它将使用 Conda进行设置。如果使用“纯” Python [sic],则取决于您拥有的版本和 Python实用程序,但virtualenvwrapper非常方便。
其次,作为“从不sudo”规则的反例,您可能更喜欢sudo -H pip install -U numpy,这非常好,甚至是有利的,因为它可以避免下载/重新安装/维护大型库,而您只想要/需要一个版本,分别进入每个 virtualenv。像 scikit-learn、NumPy、matplotlib、SciPy、pandas 等大型流行框架,可以一次性安装完成,并可以跨环境重复使用。此外,您当地友好的系统管理员可能能够为系统上的每个用户安装这些- 显然他们也会通过sudo,例如,对于更复杂的安装,例如 TensorFlow。
而且,最后,如果您正在安装一些随机的 3rd 方库来执行某某某事(Twitter API、文本编辑、代码格式化等),那么我完全同意——不要通过 sudo 将它安装为 root。当然,以您当前的用户身份安装它。但请记住,您的用户帐户拥有您所有真正重要的东西。