用一个 flake.nix 管住 Python 脚本的依赖:不用装 NixOS 也能用
来源:entropicthoughts.com — 2026-10-20
📋 概述
作者想写个把文章念给自己听的脚本,用 Trafilatura 抽正文、用 aplay 播放,于是同时踩上了第三方 Python 依赖和系统依赖两个未来会崩的点。解法是在脚本旁边放一个 flake.nix,用 writePython3Bin 把它包成可执行文件:libraries 声明 Python 依赖,makeWrapperArgs 负责在启动时把 PATH 指向 Nix 管理的系统命令。脚本本身不需要知道 Nix 存在,凭 flake.lock 就能在任何机器上复现。
🔑 核心要点
- 骨架每次一样:inputs 指向 nixpkgs 分支,outputs 用 genAttrs 展开到 x86_64-linux 与 aarch64-linux(因为 aplay 只存在于 Linux)
- writePython3Bin 生成的是一个 wrapper,先配好环境再 execve 进主脚本,所以主脚本可以按普通环境来写
- libraries 管 Python 包,makeWrapperArgs 管 aplay 这类系统命令,两类依赖一次收口
- 把 nixpkgs 固定在 nixos-26.05,升级不顺利就把版本号调回去,回滚和升级是同一个动作
- 这套模式与语言无关,换成别的解释器只是替换默认包的构造方式
💡 金句
Those suck because they break your scripts when you so much as glance sideways at pip.
👍 0
👎 0
← 返回 Lobsters 首页