Какой надежный способ включить библиотеки для пакетов py thon virtualenv в nix?

Я начну с того, что virtualenv в основном является обязательным требованием, поскольку Nix еще не используется остальной командой разработчиков. Это превосходное руководство по Python в Nix не совсем подробно описывает эту конкретную проблему.

В некоторых случаях я могу обновить LD_LIBRARY_PATH, но это становится довольно утомительным и потенциально подверженным ошибкам из-за динамической природы Python (конкретная ветка может инициировать использование библиотеки, ранее не включенной в LD_LIBRARY_PATH):

  shellHook = ''
    export LD_LIBRARY_PATH=${mysql57}/lib:${gcc6}/lib:$LD_LIBRARY_PATH
  '';

Хуже того, ${ggc6}/lib у меня не работает, так как нужная мне библиотека (libatomic.so) находится под *-gcc-6.4.0-lib/lib каталог, а не *-gcc-6.4.0/lib каталог, и я не уверен, как ссылаться на первый.

$ echo $LD_LIBRARY_PATH                                                                                                                                                                                                                                                                                                                                                                                                                                              
/nix/store/x3x3si0pc3w0vam9jj308b0qhcv7zlg2-mysql-5.7.19/lib:/nix/store/mc8p626zjk9zlgji1i8f85nax4c62nrj-gcc-wrapper-6.4.0/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64 

Некоторый вывод из find для libatomic:

/nix/store/rww78vdn2rkayrnqsjl8ib5iq2vfm3sw-gcc-6.4.0/lib/libatomic.a                                                                                                                                                                                                                                                                                                                                                                                                                                    
/nix/store/klqzvvcy1xyjjflmf7agryayc4s72jg2-gcc-6.4.0-lib/lib/libatomic.so.1                                                                                                                                                                                                                                                                                                                                                                                                                             
/nix/store/klqzvvcy1xyjjflmf7agryayc4s72jg2-gcc-6.4.0-lib/lib/libatomic.so                                                                                                                                                                                                                                                                                                                                                                                                                               
/nix/store/klqzvvcy1xyjjflmf7agryayc4s72jg2-gcc-6.4.0-lib/lib/libatomic.la                                                                                                                                                                                                                                                                                                                                                                                                                               
/nix/store/klqzvvcy1xyjjflmf7agryayc4s72jg2-gcc-6.4.0-lib/lib/libatomic.so.1.2.0

1 ответ

Я не очень часто использую инфраструктуру Python nixpkgs, поэтому я не уверен, есть ли способ отменить настройку LD_LIBRARY_PATH, Рекомендации по настройке:

  • Ты можешь использовать lib.makeLibraryPath сделать процесс намного менее утомительным. Если вы знаете, что все библиотеки, которые могут быть необходимы, (в основном) находятся в buildDepends в любом случае, вы можете использовать lib.makeLibraryPath (buildDepends ++ [ anything else ]),
  • Проблема с библиотеками GCC связана с тем фактом, что Nix нужны обернутые версии GCC, поэтому pkgs.gcc6 не является "сырым" выводом GCC. Ты можешь использовать gcc6.cc.libили, если вы используете makeLibraryPath, просто gcc6.cc будет достаточно (как makeLibraryPath автоматически выяснит, что lib вывод является правильным для просмотра под).
Другие вопросы по тегам