2016-09-07 6 views
3

На основании моих показаний (в частности, the wiki и this blog post), я пришел со следующим default.nix, что я загрузить с nix-shell:Как правильно использовать nix-shell и избегать «сбрасывания очень большого пути»?

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 

и принимает довольно долго для загрузки (около 45 секунд при первом вызове nix-shell после запуска, около 2 секунд при последующих вызовах).

Что является значением этого сообщения? Когда я ищу его в Google, я нахожу несколько вопросов GitHub, но не выражен таким образом, который легко понять для непрофессионала.

Могу ли я ускорить загрузку и удалить это сообщение? Мне кажется, что я делаю что-то неправильно.

Существуют ли общие рекомендации по написанию такой среды разработки, о которой я мог бы не знать?

ответ

3

Возможно, атрибут src (текущий каталог) очень большой. nix-shell скопирует его в магазин Nix при каждом вызове, что, вероятно, не то, что вам нужно. Чтобы обойти эту проблему, чтобы написать:

src = if lib.inNixShell then null else nix; 

(где lib происходит от Nixpkgs).

Этот способ, ./. будет скопирован при вызове nix-build, но не при запуске nix-shell.

+0

Это было очень полезно. Однако, не должен ли он читать '", а затем null else './.'; "Вместо" ", а затем null else nix;" '? – knedlsepp

 Смежные вопросы

  • Нет связанных вопросов^_^