Skip to content

这篇文章用于记录我为什么不敢用 npm 或者 Docker 或者 pip 安装软件

就以我这台 Mac 为例吧,Windows 上其实差不多

npm

首先你得有一个管理 node 版本的东西,不管是 fnm 还是 nvm,这东西在你的环境变量里

我这台 Mac 是

/opt/homebrew/bin/fnm

然后你的真正的 npm node 会被这玩意安装到 user 下(在同一个目录,所以这意味着 npm 是绑定 node 版本的)

/Users/user_name/.local/state/fnm_multishells/82397_1777030690437/bin/npm

然后 npm 它的包有两个安装位置

当前项目位置和全局位置,我们关注后者,它是:

/Users/user_name/.local/share/fnm/node-versions/v24.14.1/installation/lib

看这个路径你也能知道,你的包是绑定 24.14.1 这个版本的,所以你换 node 版本,老的全局工具肯定找不到了

pip

根据我早些年用全局 python 和全局 pip,以及 python 虚拟环境的理解

你 pip install,是会 install 到 pip 和 python 所在的那个路径的 site-packages 下

虚拟环境拥有独立的 pip 和 python.exe,所以全局工具肯定是绑死 python 解释器的位置的(如果是 uv,有时甚至没有 pip,而是软链接到某个 pip)

然后我这台 Mac 的 python 更加混乱

(1)Apple 的 Xcode Command Line Tools 带了一个 python /usr/bin/python3 实际执行位置:/Library/Developer/CommandLineTools/usr/bin/python3 (2)Homebrew 装了 Python@3.14(它不是我主动装的,而是 nmap 的依赖) (3)uv 自己管理了一些 Python

我让 AI 检查了一下包的混乱程度,还好

所以我以后我自己的项目,全面用 uv 管理就好

Docker

这块我和 AI 探讨了一下,主要的观点是:

我在排斥一种服务器部署范式被强行搬到个人电脑上的感觉

1、生命周期失控

很多项目是为了服务器部署设计的,导致你在自己电脑上跑,自动唤醒、自动运行、开机全起来,占不必要的资源。不像 GUI 软件,关闭即杀死。

2、数据归属不清晰

程序产生的数据,到底在容器里、volume 里、bind mount 的本地目录里,还是 Docker Desktop 的虚拟磁盘里。怎么卸载才能卸载干净?

3、compose.yml 变成安装目录

你几乎(最好是)记住你所有 yml 的位置,否则你甚至无法管理。入口不统一,有的是 yml,有的不是。

4、解决了环境,不等于软件质量变好

比如 Milvus,依然常常假死,甚至后台跑 cpu

5、Windows 上 bug 更不确定

每次从睡眠里起来,vm 跑满所有核心

建议:

1、把所有的 complse.yml 单独拷到一个统一的目录里,似乎能缓解一些问题

2、检查 volumes,最好挂本地

3、不要 restart: always