【问题标题】:Conda set LD_LIBRARY_PATH for env only [duplicate]Conda 仅为 env 设置 LD_LIBRARY_PATH [重复]
【发布时间】:2018-03-31 06:59:03
【问题描述】:

我安装了 miniconda3,并在其中创建了一个名为 py35 的虚拟环境。我有一些我只想在这个环境中使用的库。因此他们在

 /.../miniconda3/envs/py35/libs

但是在环境中找不到它们,因为 LD_LIBRARY_PATH 不包含所述文件夹。我现在想将 LD_LIBRARY_PATH 设置为仅当我在虚拟环境中时才包含 /lib。

我正在考虑修改 miniconda 用于启动环境的激活脚本,但不太确定这是否是标准做法,或者是否有更简单的方法来实现这一点。

【问题讨论】:

    标签: python anaconda virtualenv conda


    【解决方案1】:

    您可以通过编辑activate.d/env_vars.sh 脚本在激活环境时设置环境变量。见这里:https://conda.io/docs/user-guide/tasks/manage-environments.html#macos-and-linux

    该链接的关键部分是:

    1. 在终端中找到 conda 环境的目录 窗口,如/home/jsmith/anaconda3/envs/analytics

    2. 进入该目录并创建这些子目录和 文件:

      cd /home/jsmith/anaconda3/envs/analytics
      mkdir -p ./etc/conda/activate.d
      mkdir -p ./etc/conda/deactivate.d
      touch ./etc/conda/activate.d/env_vars.sh
      touch ./etc/conda/deactivate.d/env_vars.sh
      
    3. 编辑./etc/conda/activate.d/env_vars.sh如下:

      #!/bin/sh
      
      export MY_KEY='secret-key-value'
      export MY_FILE=/path/to/my/file/
      
    4. 编辑./etc/conda/deactivate.d/env_vars.sh如下::

      #!/bin/sh
      
      unset MY_KEY
      unset MY_FILE
      

    当你运行conda activate analytics 时,环境 变量 MY_KEY 和 MY_FILE 设置为您写入的值 文件。当您运行conda deactivate 时,这些变量是 删除。

    【讨论】:

    • 正是我想要的。谢谢你。由于我向LD_LIBRARY_PATH 添加了一些东西,所以只有很小的改动,我不能使用 unset。相反,我在停用脚本中执行export LD_LIBRARY_PATH=${LD_LIBRARY_PATH/'PATH_I_ADDED/""}`
    • 我一直在尝试这样做,但是当我激活 conda 环境时,activate.d 文件夹中的 .sh 文件似乎没有执行。我创建的新环境变量不存在。对此有任何指示吗?谢谢!
    • 点赞,有用的东西。在创建环境时有没有办法做到这一点?自动部署似乎不太合适
    • @E.Serra 有pre-linkpost-linkpost-unlink 脚本在安装包时使用,这发生在环境创建时。
    • 是否有充分的理由说明 conda 不自动完成此操作?毕竟,环境的用户希望能够通过激活环境来使用相互依赖的库。许多这些特定于环境的包都是共享库和 python 包装器,所以你什么时候不想这样做?特定于环境的 .so 文件不应该总是优先于其他位置吗?
    【解决方案2】:

    我只是想补充一点,您可以在 activate.d/env_vars.sh 中声明 2 个变量,这样可以更轻松地将变量重置为预激活状态:

    export OLD_LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
    export LD_LIBRARY_PATH=/your/path:${LD_LIBRARY_PATH}
    

    然后在 deactivate.d/env_vars.sh:

    export LD_LIBRARY_PATH=${OLD_LD_LIBRARY_PATH}
    unset OLD_LD_LIBRARY_PATH
    

    【讨论】:

    • 如果您需要保留原始值,强烈建议您这样做。一直在使用这个解决方案,效果很好。
    • 太棒了,效果很好!
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2014-12-24
    • 2016-04-16
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多