【问题标题】:What is a reliable way to include libraries for virtualenv python packages in nix?在 nix 中包含 virtualenv python 包的库的可靠方法是什么?
【发布时间】:2017-11-07 13:18:10
【问题描述】:

我首先要说 virtualenv 在这里基本上是一个要求,因为开发团队的其他成员还没有使用 Nix。这个excellent guide on Python in 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 

libatomic 的 find 的一些输出:

/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

【问题讨论】:

    标签: python gcc nix nixpkgs


    【解决方案1】:

    我很少使用 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 输出是正确的输出)。李>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 2021-08-29
      • 2016-01-25
      • 2023-03-11
      • 2020-10-16
      • 1970-01-01
      • 2014-05-28
      相关资源
      最近更新 更多