全局和本地 python 安装,意外 运行 virtualenv 之外的需求文件

Global and local python installations, and accidentally running a requirements file outside of virtualenv

所以我在谷歌上搜索了一个 pip 需要 sudo 权限的事件,我遇到了以下两个线程 What are the risks of running 'sudo pip'?Is it acceptable & safe to run pip install under sudo?

第一个线程讨论了 运行 一个带有 pip 的未知 .py 文件的安全风险(有道理),但是从第二个线程我几乎得到的印象是存在全局和本地 python 你不应该混淆的安装。我想您可以为所有用户进行全局安装,然后为每个用户添加本地包的附加路径,这是有道理的,但这是真的吗? (这也是有道理的,因为 ubuntu(我正在使用)依赖于某些 python 包,所以有一个全局根保护的 python 目录会保护这些)。但是,如果这是真的,我找不到这两个单独的目录。我试过了

import sys 
print(sys.path)

同时使用 sudo 和不使用 sudo,我得到了完全相同的目录。

无论如何,我想我会转向 pip virtualenv,但在那种情况下我想知道,如果我不小心忘记激活环境和 运行 一个奇异的 requirements.txt 外部?那不会破坏我的标准用户目录吗我一直在努力保持清洁(如果是这样,那是可恢复的吗?我只是在想,它只是忘记输入一个突击队,然后是你的 python安装搞砸了。)

运行 sudo pip install <package> 会将软件包安装到系统范围的软件包集中,通常存储在 /usr/lib/python2.7/site-packages.

之类的地方

运行 pip install package 没有激活 virtualenv 将尝试将包安装到同一个地方,但是因为(如果你的系统配置 sanely/correctly)你不会写访问该文件夹,安装命令将失败。

如果您绝对必须进行全局安装,那么最好使用分发包进行全局安装,因为这样您就可以获得自动更新的好处。但是,正如您已经解决的那样,最好不要在全局范围内安装软件包,而是使用 virtualenvs

我确实建议始终使用 virtualenv 来满足特定于特定应用程序的要求。您作为多个项目的开发人员使用的工具(例如 ipdb)可以在系统上全局安装。

请注意,所有 pip 包都是开源的,因此您可以肯定著名的 pip 包可能没有恶意代码,但当然可能包含安全漏洞。

为了防止在 virtualenv 之外意外安装 pip 包,您可以将其添加到您的 .bashrc:

export PIP_REQUIRE_VIRTUALENV=true

当你然后 运行 pip install something 在 vi​​rtualenv 之外时,它会显示一条错误消息:

Could not find an activated virtualenv (required).

如果您仍然希望能够在 virtualenv 之外安装 pip 包,您可以在 .bashrc 中添加一个函数,如下所示:

syspip() {
    PIP_REQUIRE_VIRTUALENV="" pip "$@"
}

然后您可以 运行 syspip install something 在您的系统上全局安装一些东西。

至于脚本你是运行ning:

import sys 
print(sys.path)

无论您是否运行使用 sudo 都没有关系,sudo 只会更改您执行命令时使用的用户权限,对于此脚本无关紧要。