1 个不稳定版本
0.0.0 | 2020年4月16日 |
---|
#36 在 #instant
2KB
cached-nix-shell
cached-nix-shell
是一个针对 nix-shell
的缓存层,具有后续运行时的即时启动时间。
它支持 NixOS 和 Linux。
安装
从 Nixpkgs 安装发布版本
nix-env -iA nixpkgs.cached-nix-shell
或者,从 GitHub 安装最新开发版本
nix-env -if https://github.com/xzfc/cached-nix-shell/tarball/master
用法
只需在 shebang 行中将 nix-shell
替换为 cached-nix-shell
#! /usr/bin/env cached-nix-shell
#! nix-shell -i python3 -p python
print("Hello, World!")
或者直接调用 cached-nix-shell
$ cached-nix-shell ./hello.py
$ cached-nix-shell -p python3 --run 'python --version'
或者使用 --wrap
选项来为内部调用 nix-shell
的程序。
$ cached-nix-shell --wrap stack build
性能
$ time ./hello.py # first run; no cache used
cached-nix-shell: updating cache
Hello, World!
./hello.py 0.33s user 0.06s system 91% cpu 0.435 total
$ time ./hello.py
Hello, World!
./hello.py 0.02s user 0.01s system 97% cpu 0.029 total
缓存和缓存失效
cached-nix-shell
存储由 nix-shell
设置的环境变量,并在后续运行中重用它们。它 跟踪 评估期间 nix
读取的文件,如果使用的文件中有任何更改,则执行适当的缓存失效。缓存存储在 ~/.cache/cached-nix-shell/
。
以下情况都涵盖在内
builtins.readFile
被使用builtins.readDir
被使用import ./file.nix
被使用- 更新
/etc/nix/nix.conf
或~/.config/nix/nix.conf
- 更新 nix 频道
- 更新环境变量
$NIX_PATH
以下情况由 cached-nix-shell
处理,并可能导致过时的缓存
builtins.fetchurl
或其他网络内置函数被使用(例如,在 nixpkgs-mozilla 中)
相关
-
https://discourse.nixos.org/t/speeding-up-nix-shell-shebang/4048
-
有一些相关项目专注于使用
nix-shell
进行项目开发- direnv 与 use_nix
- 带有 direnv 集成的缓存和持久化 Nix shell
- lorri,一个用于项目开发的
nix-shell
替代品 - nix-develop,一个具有缓存
nd shell
命令的通用构建工具