Какой надежный способ включить библиотеки для пакетов 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
вывод является правильным для просмотра под).