全局和本地 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
在 virtualenv 之外时,它会显示一条错误消息:
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 只会更改您执行命令时使用的用户权限,对于此脚本无关紧要。
所以我在谷歌上搜索了一个 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
在 virtualenv 之外时,它会显示一条错误消息:
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 只会更改您执行命令时使用的用户权限,对于此脚本无关紧要。