[Conda]环境激活钩子作用与应用

问题引入:

在研究Gromacs的数据分析时,需要用到gmxMMPBSA,需要在conda中创建环境,我在Linux中创建的环境,想要通过mobaXterm实现X11转发,将gmxMMPBSA的数据分析窗口从Linux转发到其他电脑进行分析,但是发现转发时候,找不到libxcb-cursor.so.0,经过解决发现这个库在conda环境中,终端识别到conda内部这个库的路径,因此我们需要引入环境变量,但是为了每次不需要手动引入,我尝试将环境变量引入到全局bashrc中

bash 复制代码
echo 'export LD_LIBRARY_PATH=/home/guohui/miniconda3/envs/gmxMMPBSA/lib:$LD_LIBRARY_PATH' >> ~/.bashrc

但这样做的局限性很明显,每次我们启动终端,都会引入一个特定的conda环境中的某个变量,这有可能会隐含环境冲突。在Linux系统中,我们时常要在终端中引入环境变量,有时为了环境的独立互不影响,我们一般尽量不会在~/.bashrc中去引入,在conda中,我们使用conda的目的即是为了环境独立,但是不想要每次激活,都去手动去做一些重复性操作,conda为我们提供了一种方法,即激活钩子。

激活钩子

在conda中我们切换环境,相当于切换python的解释器,和pip的环境包,同时去调用钩子目录下面的可执行脚本。一般钩子目录在conda环境下的etc/conda/目录下面,可以通过cd $CONDA_PREFIX,进入conda的环境目录,而conda钩子目录在环境目录下etc/conda目录下。在此目录下你能看到有两个主要目录:activate.d deactivate.d

bash 复制代码
//找到C工大环境下的钩子目录
mkdir -p $CONDA_PREFIX/etc/conda/activate.d

//进入conda钩子目录的上级目录
cd $CONDA_PREFIX/etc/conda

接下来我们看一下钩子目录下,activate.d目录下是在激活时执行的所有脚本(包含shell脚本,或Windows下bat脚本),deactivate.d目录下是环境退出时执行的清理脚本,即清理掉之前activate.d下脚本引入的环境变量,目的是为了避免环境污染。

但是有些脚本没有清理脚本,这不是必须的,但是最好为每个脚本,都编写一个清理脚本。

示例脚本

我们去解决上面所提出的问题,在每次环境激活都去引入一个libxcb-cursor.so.0库的环境变量,我们即现在activate.d目录下编写一个set_ld_library_path.sh

bash 复制代码
#进入目录
cd $CONDA_PREFIX/etc/conda/activate.d
#编写文件
vim set_ld_library_path.sh
bash 复制代码
#set_ld_library_path.sh
#!/bin/bash
export LD_LIBRARY_PATH=/home/guohui/miniconda3/envs/gmxMMPBSA/lib:$LD_LIBRARY_PATH
EOF
bash 复制代码
#赋予脚本执行权限
chmod +x $CONDA_PREFIX/etc/conda/activate.d/set_ld_library_path.sh

以上是激活时的钩子脚本,然后我们写清理脚本

bash 复制代码
#set_ld_library_path_deactivate.sh
#!/bin/bash
# 从 LD_LIBRARY_PATH 中移除我们之前添加的 Conda 环境 lib 目录
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH#$CONDA_PREFIX/lib:}

如果你不需要手动清理,完全可以省略 deactivate.d 脚本,因为 Conda 默认会在 deactivate 时恢复环境变量。提供此脚本只是为了满足你的明确要求或追求额外保险。

个人博客文章地址:https://blog.huimy.top/13/577.html

相关推荐
一碗白开水一13 小时前
【训练技巧】bash: conda: command not found:conda 没有适配环境
开发语言·conda·bash
buxiangshui_cd2 天前
Conda命令
开发语言·python·conda
DogDaoDao3 天前
【第 04 篇】列表与元组 —— 序列类型核心详解
人工智能·python·深度学习·神经网络·机器学习·conda·numpy
Kobebryant-Manba5 天前
安装cuda
pytorch·python·深度学习·conda·numpy
zlkingdom6 天前
Jetson Orin开发板,在conda环境中直接实现Pytorch的GPU加速
人工智能·pytorch·conda·随笔·jetson orin
战斗强7 天前
RTX 5090 Grounded-SAM-2 实时 RTSP 跟踪部署指南
python·conda
zhangfeng11338 天前
htc 中minconda 明明安装了 Python 3.10显示 python 3.8 因为 `conda activate` 没有真正切换成功
开发语言·python·conda
H Journey10 天前
python包和项目管理工具uv、conda介绍
python·conda·uv
hyunbar12 天前
卸载 conda(太大) 安装 miniconda
conda