跳转至

Anaconda

使用

基本概念

  • conda是一个包管理器

  • Anaconda是集成了conda的python发行版

  • MiniConda是最小的conda环境

  • conda也不是单单为了python设计的, R也可以

  • wheels

wheels和conda都解决了预编译的代码安装问题(不仅仅是源代码安装)。但是wheel没有conda的依赖处理能力,wheels只能跟踪python代码的依赖关系,conda可以跟踪很多c代码的依赖关系,这为许多用numpy和scipy做科学计算优化的科学家省了不少心。

  • conda-forge

用于增强conda的channel

基本命令

  • windows下面, 用Anaconda Commandline Prompt比较好

  • 启动:

其它都是直接conda

windows是: %windir%\System32\cmd.exe "/K" D:\anaconda3\Scripts\activate.bat D:\anaconda3

  • 验证安装: conda --version

  • 升级:

    conda update conda
    conda update anaconda
    
  • 帮助: conda --help

  • 卸载: linux合mac直接删掉就可以了

windows要取卸载

  • windows下面可以用conda navigator来使用环境

环境操作

  • 导出
conda env export > environment.yml

And recreate it using:

conda env create -f environment.yml

Please note that as others suggested - you should use virtual environments which allows you to create a certain environment that is separated from that of your machine and manage it more easily.

  • 创建环境

    conda create --name <env_name> <package_names> python=xxx
    like: 
    conda create -n yourenvname python=x.x anaconda
    conda create python=xxx --prefix=要安装的路径,否则在%userprofile%/.conda
    

    注意最后面的意思是包含anaconda包

    用-p指定路径的话, 不让用-n

  • 激活source activate yourenvname

​ window是 activate <env_name> 前面也可以加conda

  • 退出到根环境
conda deactivate
  • 列出
conda env list
conda info -e
  • 复制
conda create --name <new_env_name> --clone <copied_env_name>
  • 删除
conda remove --name <env_name> --all  # 这样是删除包
然后要
conda env remove --name <env_name> # 这样删除了环境
  • 重命名
conda env update --name myenv --name newenv

包管理

包操作

  • 首先要conda active 到你的环境; 不activate也行, 增加-n参数指定环境

  • 列出当前包 conda list 还可以用正则式

    conda list fast* 
    
    conda list -n base # 指定环境
    
  • 安装 conda install xxx, 下面指定环境安装

    conda install -n py35 numpy
    

    xxx后面可以加=VERSION-NUMBER 来指定版本

  • 卸载 conda uninstall xxx

  • 全部更新 conda update --all

  • 更新一个 conda update xxx

  • 列出

    conda list -n py35
    
  • 搜索

    conda search numpy
    
  • 网页版搜索: https://bioconda.github.io/

原理

  • 安装包实际需要

    image-20230409200833093

  • 要进行一个依赖决算

    image-20230409200852215

常用源chanels管理

mamba--conda安装包的加速器

  • 用了C++, 并且 libsolv的 C 库 加速了决算

  • 这样安装 conda install -n base -c conda-forge mamba 在base安装才行

  • 这样更新: mamba update -n base mamba

  • 可以

    mamba config prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
    mamba config prepend channels conda-forge
    
  • 清华就不要加了, 不兼容

  • 搜索mamba repoquery search samtools

  • 搜索依赖 mamba repoquery depends -a samtools

  • 创建:

    mamba create --name python3.5 python=3.5 #完美替代conda
    mamba create -n rnaquant salmon r-tximport bioconductor-deseq2 # 后面是多个库
    

    -n是名字, 后面是库

  • 激活和conda一样

    conda activate python3.5 #激活python3.5环境
    conda deactivate #退出python3.5环境
    
  • 安装 mamba install -n rnaquant fastqc

  • 更新全部 mamba update -n rnaquant --all

  • 可以回退

    mamba list -n rnaquant --revisions
    mamba install -n rnaquant --revision 1  # 1是你自己看第几个版本
    
  • 删除环境

    mamba env remove -n rnaquant
    
  • 导出环境

    mamba env export -n rnaquant > rnaquant_env.yaml
    
  • 重新创建环境

    mamba env create -n rnaquant
    mamba env update -n rnaquant -f naquant_env.yaml
    

Conda-Forge

  • 另外一个源

  • 注意和Anaconda自己管理的混用可能会出问题. 不是完全兼容的

he conda-forge and defaults are not 100% compatible. In the example above it is known that defaults uses icu 54.* while conda-forge relies on icu 56.*, that mismatch can lead to errors when the install environment is mixing packages from multiple channels.

Note: All of conda-forge software pinning can be found at: https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml

ICU stands for "International Components for Unicode". These are the i18n libraries of the Unicode Consortium. They implement much of the Unicode Standard, many of its companion Unicode Technical Standards, and much of Unicode CLDR.
  • conda install -c conda-forge pybuilder 可以这样指定channel

  • 可以这样指定

conda config --add channels conda-forge 
conda config --set channel_priority strict  # 这个是优先用conda-forge
conda install <package-name>

这样之后.condarc文件会变

$ cat .condarc
channel_priority: strict
channels:
  - conda-forge
  - defaults

再次讨论一堆东西的区别

作者:杨博

在Python世界,虽然有很多工具可以搞一点依赖管理,但每一个工具都不能解决全部问题。

  • pip可以管理Python依赖,但是pip包都是源码包,得在安装时编译,常常由于系统环境的原因而编译失败。此外pip也不能用来安装官方版的opencv这样的原生库。

  • pyenv可以管理Python版本

  • Virtualenvvenv可以创建虚拟环境,让多个项目之间的Python依赖隔离开,不会在项目之间冲突。

  • pipenv把pip、pyenv和virtualenv的功能整合到一起,但是仍然没有解决源码编译的问题和原生库的安装问题。

  • Conda是个包管理器,可以支持二进制包,所以不需要安装时从源码编译了,而且也可以装原生库。但是,一些 pip 里的 Python 库在 conda 里找不到。

    • Anaconda是用Conda管理的Python科学计算发行版
  • Conda Forge是另一个Python发行版,要比Anaconda的包更丰富。但这里有个坑就是Conda Forge和Anaconda并不完全兼容,如果你有一个项目同时用到Anaconda和Conda Forge里的包,有可能会挂。

  • Anaconda Project可以在一个项目里创建多个虚拟环境,既可以管理conda依赖,也可以管理pip依赖,但还是缺了CUDA这样的系统包和一些命令行工具。

  • Apt之类的系统包管理工具可以安装系统包,但是会受到操作系统发行版的限制,比如说Ubuntu 14.04里就装不了CUDA 9。

  • Docker可以在容器里装一个操作系统发行版,从而可以方便的切换操作系统版本。但是容器和宿主必须要共享操作系统内核,所以没办法在macOS直接运行Linux发行版的docker容器。

  • nvidia-docker可以把宿主的GPU设备文件和驱动挂载到Docker容器里,但是只支持Linux。

这些工具解决的问题虽然不完全一样,但也有一部分重叠。我具体给一点建议:

  1. 如果临时写几行不在项目里的代码,用操作系统全局的 Anaconda 环境。
  2. 如果需要创建多个数据挖掘或科学计算的项目,那么用 Anaconda Project 隔离这些项目,不要用pipenv。
  3. 如果需要创建多个Python网站的项目,那么用 pipenv 隔离这些项目,不要用 conda。
  4. 用Anaconda Project管理的项目中,如果需要安装纯Python库,优先用pip包,如果是需要额外编译的库,优先用conda包。
  5. 如果需要隔离系统环境,用Linux版的Docker,在容器里安装系统依赖。
  6. conda和Linux发行版都有的二进制包,优先用conda装。因为发行版发布周期慢,版本旧。

mamba

  • 是conda的一个包, 可以加速
  • 清华的源会出问题
  • 用conda-forge 就好了

FAQ

  • 如果说已经有个instance 在跑, 不让你启动
tasklist | findstr "pythonw"

然后tskill pid ,一个个杀掉