在nix中包含virtualenv python包的库的可靠方法是什么?

时间:2017-11-07 13:18:10

标签: python gcc nix nixpkgs

我首先要说virtualenv基本上是一个要求,因为Nix尚未被开发团队的其他人使用。这个excellent guide on Python in Nix并没有完全深入到这个特定的问题。

在某些情况下,我可以更新LD_LIBRARY_PATH,但由于Python的动态特性,它会变得相当繁琐并且可能容易出错(特定分支可能触发使用以前未包含在{{{ 1}}):

LD_LIBRARY_PATH

更糟糕的是, shellHook = '' export LD_LIBRARY_PATH=${mysql57}/lib:${gcc6}/lib:$LD_LIBRARY_PATH ''; 在这里对我不起作用,因为我需要的库(libatomic.so)位于${ggc6}/lib目录下,而不是*-gcc-6.4.0-lib/lib目录下,而我我不确定如何引用前者。

*-gcc-6.4.0/lib

find for libatomic的一些输出:

$ 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 

1 个答案:

答案 0 :(得分:0)

我不太使用nixpkgs Python基础结构,所以我不确定是否有消除设置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输出是正确的下一个。)