在日常数据的分析过程中,我们往往会使用许许多多的软件;这些软件需要不同的依赖举个例子A软件需要python2的环境而B软件需要python3的环境,因此当你使用python去运行软件的时候往往敲下的命令像这样python A.py
;这时候就需要仔细检查一下python是否是正确的版本python2|python3
。
不仅仅是python版本的问题,甚至有些软件在python包上也会有冲突,这样就很难办了;例如A软件需要的是numpy 1.0.4
而B软件需要的是numpy 1.2.4
;这时候运行不同的软件你就需要去指定加载不同版本的numpy
包了。
conda的出现减少我们在软件安装上带来的困惑,让更多的精力投入到数据分析中。
预备知识
环境变量: 操作系统运行时的一些参数和系统配置;为了方便统称内存吧
简单的来说就是当系统启动的时候,一些东西就被加入到操作系统中,在这个环境下;你可以从内存中取出这个变量的值;但是我们系统的内存是有限的,不可能把所有的文件信息、位置存到内存中;我们仅仅只把一些系统关键信息、常用到的一些东西存进内存。
做个简单的示范
假设我在当前环境设置一个变量a=10;再开启一个子进程是就访问不了这个变量a了;
但是把它加入到内存后,在子进程中同样可以访问到这个变量
###没加入环境变量
(base) [zpliu@mn02 cdHit]$ a=10
(base) [zpliu@mn02 cdHit]$ bash ##开启子进程
(base) [zpliu@mn02 cdHit]$ echo $a
#值为空
###加入环境变量中
(base) [zpliu@mn02 cdHit]$ export a=10 ##加入环境变量
(base) [zpliu@mn02 cdHit]$ bash ##进入子进程
(base) [zpliu@mn02 cdHit]$ echo $a
10
安装MiniConda
下载安装包后,正常情况一路点确定就行,并且会下载一些包用于MiniConda的初始化;
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
安装完成后脚本会自动在~/.bashrc
文件中添加一些配置信息
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/public/home/lqiao/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/public/home/lqiao/miniconda3/etc/profile.d/conda.sh" ]; then
. "/public/home/lqiao/miniconda3/etc/profile.d/conda.sh"
else
export PATH="/public/home/lqiao/miniconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
接下来只需要重新加载一下配置文件就可以使用conda
了
##重新加载bashrc文件
source ~/.bashrc
添加清华镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
##添加bioconda源
# bioconda
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes
Conda的正确使用姿势
每个软件的依赖项不一样,因此在使用的时候,尽量给每个软件创建一个单独的环境;保证软件能够正常的运行。
下面以安装计算遗传复杂度软件xlcpr
为例,xlcpr
是基于python3的,因此安装是就需要制定python的版本
1.创建xlcpr
环境
环境名可以和软件名字一样方便回忆,我这里就取xcplr了
conda create -n xpclr python=3.8.3
2.安装依赖
一般软件对应的文档会有命令的
conda activate xcplr ##进入环境
conda install xpclr -c bioconda -y
##或者不进入环境就安装包
conda install xpclr -c bioconda -y -n xpclr ##-n就是指定环境用的
安装完成后在当前环境变量就会有xcplr
这个可执行脚本了
3.退出环境
conda deactivate xlcpr
4.删除环境
如果有的软件不用了,也可以直接把对应的整个环境给删除掉
conda remove -n xpclr --all
5.列出环境中已经安装的包
conda进阶
接下来这部分主要讲conda的大致实现原理,
conda info ##查看conda的详细信息
最主要的信息就是
package cache : /public/home/zpliu/miniconda3/pkgs
/public/home/zpliu/.conda/pkgs
envs directories : /public/home/zpliu/miniconda3/envs
/public/home/zpliu/.conda/envs
每次下载依赖的时候,conda会去检测package cache
中是否含有对应版本的包,conda会拷贝一份到对应环境,没有就会下载一份。
再说说envs directories
这个变量吧。
【持续更新】错误集锦
安装包错误
failed with initial frozen solve Retrying with flexible solve.
解决办法
conda config --add channels conda-forge
conda config --set channel_priority strict