[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

相关推荐
饭来_2 小时前
Ubuntu 中出现 CondaToSNonInteractiveError 的解决方法
ubuntu·conda·debug
emo_2b2 天前
Pycharm配置conda解释器时遇到的问题及解决方法
linux·pycharm·conda
Είναι η κοπέλα4 天前
llama.cpp 与 GGUF 格式:本地大模型的“裸引擎“
开发语言·人工智能·pytorch·python·conda
Είναι η κοπέλα6 天前
显存计算与模型选择:你的显卡能跑多大的模型
人工智能·pytorch·python·开源·conda
天蓝蓝的本我6 天前
conda日常用到的命令积累1-登录linux,安装pycharm
linux·pycharm·conda
Είναι η κοπέλα8 天前
Python 虚拟环境:venv、conda 与 Python 版本选择全解
开发语言·python·conda
夏天拐跑了西瓜11 天前
一文入门LangChain:从框架认知到构建你的第一个AI Agent
python·langchain·conda·agent
weixin_4617694011 天前
机械臂SDK运行日志
conda·sdk
三点水-here12 天前
从 Miniconda 迁移到 Miniforge3 全记录:安装、配置、环境迁移与排错实录
python·conda
MI_farmer13 天前
Anaconda 安装在 D 盘但虚拟环境跑到 C 盘,以及 Conda PermissionError: WinError 5 的解决方法
c语言·开发语言·conda