ocaml – 如何正确使用nix-shell并避免“转储非常大的路径”?
发布时间:2020-12-15 21:49:14 所属栏目:安全 来源:网络整理
导读:根据我的读数(特别是 the wiki和 this blog post),我提出了以下使用nix-shell加载的default.nix: with import nixpkgs {};let emacs = emacsWithPackages (p : [ p.tuareg ]);instdenv.mkDerivation rec { name = "env"; src = ./.; # Customizable develop
根据我的读数(特别是
the wiki和
this blog post),我提出了以下使用nix-shell加载的default.nix:
with import <nixpkgs> {}; let emacs = emacsWithPackages (p : [ p.tuareg ]); in stdenv.mkDerivation rec { name = "env"; src = ./.; # Customizable development requirements buildInputs = [ pkgconfig ocaml ocamlPackages.merlin ocamlPackages.findlib ocamlPackages.lablgtk ocamlPackages.camlp5_transitional ncurses emacs ]; # Customizable development shell setup shellHook = '' export PATH=`pwd`/bin:$PATH ''; } 但它总是打印一个警告: warning: dumping very large path (> 256 MiB); this may run out of memory 加载需要很长时间(启动后第一次调用nix-shell约45秒,后续调用约2秒). 这条消息是什么意思?当我在Google上查找它时,我发现了一些GitHub问题,但没有以一种易于理解的方式表达. 我可以加快加载并删除此消息吗?在我看来,我做错了什么. 是否有关于编写这种我可能不知道的开发环境的一般性建议? 解决方法
可能src属性(当前目录)非常大. nix-shell会在每次调用时将其复制到Nix商店,这可能不是你想要/需要的.解决方法是写:
src = if lib.inNixShell then null else ./.; (其中lib来自Nixpkgs). 这条路,./.将在您调用nix-build时复制,但在运行nix-shell时不会复制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |