这篇文章用于记录我为什么不敢用 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