如题,最近发现 debian 系统自带的 pip 已经不让自行安装 packages 了,提示“This environment is externally managed”。我查了一下,发现大概是 PEP 668 要求的,为了防止把系统环境搞乱,保护系统工具可用。
可是我不理解这样做和传递--user 比有什么优势,用户安装在自己目录下的包也不会干扰系统工具啊。我之前一直用--user ,主要写一点脚本啥的自用。--user 下不会重复装 package ,也不需要切换虚拟环境,感觉还挺方便的。
1
momocraft 42 天前
venv 可以有任意多個 同一個包可以有多份(在不同 venv )
全局 pip 的--user 一般就裝在 HOME 下一個位置 |
2
NoOneNoBody 42 天前
A 包装在系统,那 --user 装 B 包,而 B 包指定了一个低版的 A 包作为依赖,怎么办?
|
3
hhylx1950 OP @NoOneNoBody 这个很好解决吧,user 把低版本的 A 包和 B 包放在自己目录下。系统用其它账户运行 python ,看不到 b 包和低版本的 A 包。
|
4
NoOneNoBody 42 天前
@hhylx1950 #3
你安装时会逐个依赖先检查一遍再安装么? |
5
ho121 42 天前 via Android
比如要开发两个应用,一个比较旧,一个比较新,两个应用都依赖 A 但版本不一样。这种情况下用虚拟环境最适合了
|
6
JKOR 42 天前
@hhylx1950 那么问题来了,此时另外一个项目中 C 包又需要一个更低版本的 A 包,怎么办?当你想到一个项目一个用户的时候 pip 虚拟环境的设计思想就来了,一个项目一个环境。
|
7
hhylx1950 OP @NoOneNoBody 不需要用户检查,pip 完全可以自己做到
|
8
deplives 42 天前
虚拟环境可以针对不同项目设置,user 只有一个环境
比如你现在有 N 个项目,分别依赖某一个 package 的 N 个版本,用 user 怎么做 |
9
hhylx1950 OP @JKOR 我同意开发项目的时候这样是很有用的,我也这么用。但是不理解的是 user 安装有方便的地方,也不会造成问题,但是感觉被强制了
|
10
kaedeair 42 天前
系统工具依赖特定 python 版本和特定版本的包,所以才禁止全局安装,此外全局安装也会影响其他用户。
当你的不同项目对同一个包有依赖但版本不同或使用的 python 版本不同时,虚拟环境才有用 |
11
vituralfuture 42 天前
环境被外部管理的意思不只是说包被系统包管理器管理了,python 版本也被包管理器管理了。如果用--user ,然后发行版更新了 python 版本,就可能出现用--user 安装的包没法在更高版本的 python 解释器上运行的情况
|
12
clemente 42 天前
系统如果依赖 系统路径下的包路径 你升级了 系统软件崩了
|
13
clemente 42 天前
无脑 condamini 完事
|
14
julyclyde 42 天前
感觉这个功能开启之后--user 基本相当于不存在了
需要开启 break system 然后才能开启 user |
15
COW 42 天前
一个项目一个 venv ,我一直是这么做的。因为同一个库,在不同项目下,版本可能会不同。当然,你也可以一个项目,一个 user 。。。
|
16
beginor 42 天前 via Android
参考 node_modules 目录
|
17
hhylx1950 OP @vituralfuture 感谢,这确实是个隐忧,不过概率很小罢了
|
18
uni 41 天前
因为 pep 对单文件脚本的依赖和环境也是有规定的,哈哈
还是用 uv 吧,全部解决了,省心 |
19
iorilu 40 天前
啥意思, 你一次只搞一个项目吗
任何 python 开发都知道区别把 |