使用pip --user选项和创建virtualenv一样安全吗?

时间:2017-07-17 20:31:34

标签: python pip virtualenv

在使用pip install --user的用户的主目录中安装软件包是否提供与使用virtualenv相同的防止系统更改的保护级别?

2 个答案:

答案 0 :(得分:3)

出于一些小原因,使用virtualenv是优选的,这是一个重要原因。

  • virtualenv有一个"重新定位"选项(注意:此功能已标记为有问题,可能无法在所有情况下使用)。如果您尝试将项目重新定位到另一台计算机,则需要使用--user重新安装所有软件包。

  • 除非您更改PYTHONPATH以便未加载site-packages中的模块,并重新安装用户目录中的每个模块,否则python将继续搜索系统目录中安装的模块。如果您正在考虑使用--user,我假设您要么没有安装系统软件包的权限,要么您担心将来会破坏链接。与--user不同,virtualenv会跟踪所有模块(包括virtualenv中安装的系统范围的模块和模块),因此我想象它不太可能会破坏某些东西" (或者,至少,如果您使用virtualenv,将更容易确定问题是什么)。

这些问题可能会令人讨厌,但它们是可以克服的。 --user和virtualenv之间的最大区别在于virtualenv将允许您为您创建的每个环境存储每个包的一个版本,从而消除版本控制问题(即,您构建一个项目以使用一个一个软件包的版本,然后你升级软件包以使用一些新功能处理一个新项目,并发现你的旧项目现在已经坏了)。这是一个非常重要的事情 - 在这方面,用户没有任何帮助(除非你想在你的机器上为你工作的每个项目创建一个新的用户帐户,我不建议这样做。)

答案 1 :(得分:2)

  

在使用pip install --user的用户的主目录中安装软件包是否提供与使用virtualenv相同的系统级别更改保护?

通过“破坏系统的变化”, 我想你的意思是操作系统的软件包管理器工具安装的软件包。 使用--user选项pip, 包将安装在用户的主目录中。 并且由于包管理器不应该依赖于用户目录,而是仅使用安装在系统中指定位置的包, 独立于用户的垃圾, 不应该使用pip install --user打破正确管理的系统。

然而, 如果您与用户一起使用多个Python项目, 总是始终使用virtualenv是有意义的, 防止项目之间的版本冲突。