TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 779 subscribers
Post #1891 1
Python 虚拟环境其实是个软链接

在 Linux 和 macOS 上执行 python3 -m venv .venv,并不会复制一份 Python。venv 里的 python 只是一个软链接,指回系统解释器;标准库同样没有被复制,真正属于 venv 的只有 site-packages 里的第三方包。

这意味着一旦系统 Python 被升级、移动或删除,venv 可能直接失效,也可能在毫无提示的情况下改用另一个 Python 继续运行。
用 ls -la .venv/bin/ 能看到 python、python3、python3.12 全是软链接,readlink -f 追下去最终都指向 /usr/bin/python3.12。venv 的 pyvenv.cfg 里写着 home = /usr/bin,Python 启动时靠它找到真正的解释器和标准库。
实测一个 venv 目录约 12M,几乎全是 pip;解释器和几十兆的标准库都不在里面。把 venv 改名或移动后,pip 等命令行脚本会因 shebang 里的绝对路径失效而报 bad interpreter,venv 不可迁移。
用 --copies 建 venv 只复制了二进制,标准库仍是借用的。当 base Python 消失时,软链接版直接报 No such file or directory,而 --copies 版会静默回退到编译时的 prefix,可能悄悄换用另一套标准库,引发难以排查的 ImportError。

这种设计是有意为之:venv 追求轻量、创建快、可随时丢弃,系统打安全补丁时所有 venv 自动受益。代价是 venv 的稳定性完全取决于它指向的那个解释器。

应对办法是掌控自己的基础解释器:用 uv 或 pyenv 安装固定版本的 Python 再建 venv,锁定依赖并随时重建;Docker 多阶段构建时保证运行阶段与构建阶段使用相同基础镜像和相同路径;目标机器可能没有 Python 时,直接连同解释器一起打包分发。
More from @devtoolboxhub
  1. Sep 29, 2026Will It Focus:相机自动对焦兼容性查询 Agent 这是一个面向摄影器材的自动对焦兼容性查询工具,但它真正的看点在于工程实现:如何让模型引用厂商原文时,保证引用的确实是…
  2. Sep 28, 2026Agent 运营站点实测:125 次曝光零点击 这是一个由 agent 负责写作、部署和测量的站点,人类只做审批。第二期实测记录披露了一组数据:查询词 git undo last…
  3. Sep 28, 2026SaveNowX 无落盘下载 X 视频的架构设计 SaveNowX 是一个免费工具,把公开的 X(Twitter)帖子解析成可下载的视频,无需账号、无水印、不留历史记录。作者在开发…
  4. Sep 28, 2026GitHub 的 pull_request_target 改动会破坏什么 GitHub 今年调整了 pull_request_target 的运作方式,两项带日期的变更会影响所有使…
  5. Sep 27, 2026Instagram 字体生成器:把普通文字换成 Unicode 样式 Instagram 字体生成器是一类在线工具,把普通字母转换成外观不同的 Unicode 字符,再复制粘贴到…
  6. Sep 27, 2026用一个下午审计公司里的重复性工作 多数公司不需要耗时半年的转型项目,才能发现时间到底流失在哪里。花几个小时追踪三个真实工作流,就能看出很多问题。关键不是问团队哪里效率低,也不是凭记…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →