在使用pip install --user
的用户的主目录中安装软件包是否提供与使用virtualenv相同的防止系统更改的保护级别?
答案 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
是有意义的,
防止项目之间的版本冲突。