请问 pip 虚拟环境与--user 比有什么优势吗?

2024-10-10 00:36:56 +08:00
 hhylx1950

如题,最近发现 debian 系统自带的 pip 已经不让自行安装 packages 了,提示“This environment is externally managed”。我查了一下,发现大概是 PEP 668 要求的,为了防止把系统环境搞乱,保护系统工具可用。

可是我不理解这样做和传递--user 比有什么优势,用户安装在自己目录下的包也不会干扰系统工具啊。我之前一直用--user ,主要写一点脚本啥的自用。--user 下不会重复装 package ,也不需要切换虚拟环境,感觉还挺方便的。

2461 次点击
所在节点    Python
19 条回复
momocraft
2024-10-10 00:40:28 +08:00
venv 可以有任意多個 同一個包可以有多份(在不同 venv )

全局 pip 的--user 一般就裝在 HOME 下一個位置
NoOneNoBody
2024-10-10 01:55:54 +08:00
A 包装在系统,那 --user 装 B 包,而 B 包指定了一个低版的 A 包作为依赖,怎么办?
hhylx1950
2024-10-10 03:06:03 +08:00
@NoOneNoBody 这个很好解决吧,user 把低版本的 A 包和 B 包放在自己目录下。系统用其它账户运行 python ,看不到 b 包和低版本的 A 包。
NoOneNoBody
2024-10-10 03:38:36 +08:00
@hhylx1950 #3
你安装时会逐个依赖先检查一遍再安装么?
ho121
2024-10-10 08:09:02 +08:00
比如要开发两个应用,一个比较旧,一个比较新,两个应用都依赖 A 但版本不一样。这种情况下用虚拟环境最适合了
JKOR
2024-10-10 11:22:18 +08:00
@hhylx1950 那么问题来了,此时另外一个项目中 C 包又需要一个更低版本的 A 包,怎么办?当你想到一个项目一个用户的时候 pip 虚拟环境的设计思想就来了,一个项目一个环境。
hhylx1950
2024-10-10 11:29:00 +08:00
@NoOneNoBody 不需要用户检查,pip 完全可以自己做到
deplives
2024-10-10 11:30:01 +08:00
虚拟环境可以针对不同项目设置,user 只有一个环境
比如你现在有 N 个项目,分别依赖某一个 package 的 N 个版本,用 user 怎么做
hhylx1950
2024-10-10 11:30:59 +08:00
@JKOR 我同意开发项目的时候这样是很有用的,我也这么用。但是不理解的是 user 安装有方便的地方,也不会造成问题,但是感觉被强制了
kaedeair
2024-10-10 12:26:42 +08:00
系统工具依赖特定 python 版本和特定版本的包,所以才禁止全局安装,此外全局安装也会影响其他用户。
当你的不同项目对同一个包有依赖但版本不同或使用的 python 版本不同时,虚拟环境才有用
vituralfuture
2024-10-10 12:48:19 +08:00
环境被外部管理的意思不只是说包被系统包管理器管理了,python 版本也被包管理器管理了。如果用--user ,然后发行版更新了 python 版本,就可能出现用--user 安装的包没法在更高版本的 python 解释器上运行的情况
clemente
2024-10-10 13:21:34 +08:00
系统如果依赖 系统路径下的包路径 你升级了 系统软件崩了
clemente
2024-10-10 13:22:07 +08:00
无脑 condamini 完事
julyclyde
2024-10-10 14:18:50 +08:00
感觉这个功能开启之后--user 基本相当于不存在了
需要开启 break system 然后才能开启 user
COW
2024-10-10 14:56:13 +08:00
一个项目一个 venv ,我一直是这么做的。因为同一个库,在不同项目下,版本可能会不同。当然,你也可以一个项目,一个 user 。。。
beginor
2024-10-10 18:55:57 +08:00
参考 node_modules 目录
hhylx1950
2024-10-10 21:58:02 +08:00
@vituralfuture 感谢,这确实是个隐忧,不过概率很小罢了
uni
2024-10-11 11:42:12 +08:00
因为 pep 对单文件脚本的依赖和环境也是有规定的,哈哈
还是用 uv 吧,全部解决了,省心
iorilu
2024-10-11 21:40:23 +08:00
啥意思, 你一次只搞一个项目吗

任何 python 开发都知道区别把

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1078725

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX