今天再给生信泥潭中挣扎的兄弟推荐一个运行环境及package管理的优秀方法,即利用conda建立独立的package运行环境。
“Conda 是一个开源的软件包管理和环境管理系统,广泛用于数据科学和机器学习等领域。它的优势在于能够在不同的操作系统上(如 Windows、macOS 和 Linux)统一管理软件包和依赖项,解决了软件兼容性问题。Conda 提供了虚拟环境功能,使得用户可以创建、管理和隔离多个独立的环境,确保不同项目之间的依赖项不会冲突。此外,Conda 还支持多个语言的包管理,如 Python 和 R,使得跨语言的项目开发更加便捷。它的丰富的包库和简单的命令行操作,使得软件安装和更新变得更加容易和高效。”
先在这里对conda、miniconda及anaconda进行区分:
- Conda 是一个包管理和环境管理工具,支持安装和管理软件包以及创建虚拟环境。
- Anaconda 是一个更全面的发行版,包含 Conda 以及一系列常用的数据科学和机器学习软件包,如 NumPy、Pandas、Jupyter Notebook 等,适合需要完整数据科学环境的用户。
- Miniconda 是 Conda 的轻量级版本,只包含 Conda 和其必要的依赖项,没有预装其他软件包,适合用户自行选择安装需要的软件包。
总的来说,Conda 是核心工具,Miniconda 提供基础框架,而 Anaconda 提供了完整的解决方案。
在此处选择轻量化的miniconda安装,进行后续的package管理等。
Part 1 Miniconda下载及安装
1.1 Miniconda下载
Miniconda下载地址为:
https://docs.anaconda.com/miniconda/miniconda-other-installer-links/
寻找合适的Linux版本、处理器平台及python版本的miniconda版本:
1.2 Miniconda安装
将下载的文件(Miniconda3-py311_24.5.0-0-Linux-x86_64.sh)上传至服务器目标位置“/path/to/your/dir”并运行:
chmod a+x /path/to/your/dir/Miniconda3-latest-Linux-x86_64.sh
cd path/to/your/conda_dir
/path/to/your/dir/Miniconda3-latest-Linux-x86_64.sh
根据提示安装miniconda即可,安装进程结束后在环境变量中加入以下内容:
# 向/home/username/.bashrc中加入:
PATH="path/to/your/conda_dir/miniconda3/bin/":$PATH
# 重载.bashrc
source ~/.bashrc
# 将conda初始化脚本加入shell配置文件
conda init
#重启shell
安装完成!
Part 2 conda创建环境及安装package
2.1 conda创建python环境
# 创建名为“py_env_name”并预装python 3.12的conda环境
conda create -n py_env_name python=3.12
# 启动名为“py_env_name”的conda环境
conda activate py_env_name
# conda退出当前环境
conda deactivate
2.2 conda安装软件包
在conda环境中安装软件包,尽量利用conda进行安装,可以避免一些兼容性的问题。在安装了python的环境中,可以利用“pypip”进行安装:
conda activate py_env_name
pip install package_name
# 使用国内(清华)源进行安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name
# 清理pip缓存
pip cache purge
利用conda进行安装:
conda activate py_env_name
conda install package_name
conda可以设置国内(清华)源以加速package下载:
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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
conda的package有不同的渠道(channel),指代不同的存储和分发软件包的仓库,在下载不同package的时候可以指定渠道(-c),常用的channel包括:由社区驱动的conda软件包渠道(Conda-Forge)以及专门用于生物信息学分析的软件包渠道(Bioconda):
conda install -c bioconda biopytho
conda install -c conda-forge pandas
也可以将conda的渠道加入conda配置中:
conda config --add channels conda-forge
conda config --add channels bioconda
# 设置conda下载的channel优先级
conda config --set channel_priority strict
# 显示conda下的channel
conda config --show channels
# 显示conda下的channe优先级
conda config --show channel_priority
此处设置严格的channel优先级:Conda 会严格按照渠道的优先级来解决包的依赖关系。也就是说,Conda 会首先尝试从优先级最高的渠道中安装所有包,只有在该渠道中找不到包时,才会转向下一个渠道。严格的渠道优先级可以确保所有包及其依赖项尽量从同一个渠道安装,这有助于避免不同渠道间的包版本冲突,提高系统的稳定性和兼容性。
2.3 conda下载软件包并利用本地包进行安装(以pandas为例)
可以利用一台联网的相同处理器平台的linux计算机下载软件包并移动到offline的Linux Server中进行安装。
# 创建一个新的环境(可选,但推荐以避免影响现有环境)
conda create -n download_env
conda activate download_env
# 使用 conda 下载 pandas 安装包,但不进行安装。将包下载到本地目录中
conda install pandas --download-only --copy -c conda-forge
# pandas 及其依赖项将存储在 Conda 的 pkgs 目录中
mkdir pandas_packages
cp -r ~/anaconda3/pkgs/pandas* pandas_packages/
cp -r ~/anaconda3/pkgs/dependency_package* pandas_packages/ # 复制所有依赖包
将“pandas_packages”复制到offline的Linux Server中,并安装pandas
conda create -n myenv
conda activate myenv
# 利用本地pandas包进行安装
conda install --use-local pandas_packages/pandas-*.tar.bz2
# 或
conda install --offline -c file:///path/to/pandas_packages pandas
验证pandas的安装:
conda activate myenv
python -c "import pandas as pd; print(pd.__version__)"
Part 3 打包conda环境并重建环境
可以发现,以上利用conda下载package并利用本地进行安装的方式虽然可以实现在offline Server上的安装,但当有大量package需要在环境中重建的时候便有些繁琐,故可以利用conda-pack进行整体环境打包迁移。
3.1 conda环境打包
只需在需要打包的linux系统中安装conda-pack即可,用来重建conda环境的offline Server仅需conda即可。
conda activate base # 保证在based环境中
conda install -c conda-forge conda-pack
conda pack -n env_name -o env_name.tar.gz
3.2 重建环境
将“env_name.tar.gz”传输至offline Server的conda环境路径中:
“/path/to/your/miniconda3/envs/”
cd /path/to/your/miniconda3/envs/
mkdir env_name
tar -xzvf env_name.tar.gz -C /path/to/your/miniconda3/envs/env_name
# 检查conda环境
conda env list
conda activate env_name
# 检查conda安装的package
conda list
# 检查pip安装的package
pip list
# 利用python检查是否可以调用python包(假设安装了pandas)
python
>>import pandas as pd
>>
# 未报错
Part 4 其他常用conda命令
# 显示conda版本
conda --version
# 显示conda帮助信息
conda --help
# conda列出所有环境
conda env list
conda info --envs
# 导出环境配置文件
conda env export > environment.yml
# 从配置文件创建环境
conda env create -f environment.yml
# 删除环境
conda remove -n myenv --all
# 更新包
conda update package_name
# 删除包
conda remove package_name
# 搜索包
conda search package_name
WeChat public account:长安不老李