anaconda-command-note

anaconda-command-note

Charles Lv7

Conda 常规命令

前言

Conda是Anaconda中一个强大的包和环境管理工具,可以在Windows的Anaconda Prompt命令行使用,也可以在macOS或者Linux系统的终端窗口(terminal window)的命令行使用。

我们通常需要针对自己的工程和项目需要安装不同的包,包括python、深度学习的框架(tensorflow、pytorch、mxnet等等),由于python版本有py2.7和py3.0两种版本,那么需要创建不同的环境进行隔离。初始安装anaconda软件时,会为我们安装最新版本的python(比如当前python3.7)。通常我们面临这两种情况才会选择创建环境:(1)python版本不同(2)python版本一致,第三方包或者框架的版本不同,比如pytorch 0.4.1和pytorch 1.21两个不同版本的框架势必要分开安装。

本文简单介绍conda的一些常用命令命令。当然,本文假定你已经安装了Anaconda,并且在Windows条件下使用Anaconda Prompt或者在Linux下使用terminal window。

conda命令的一些选项开关有两种指定方式,一种两个连接号“–”后跟选项名全程,一种是一个连接号“-”后跟简称。比如说"-n"和"–name"是等价的。但是要注意有些例外,比如说,“–version”对应的是“-V”。

管理conda自身

查看conda版本

1
conda --version

查看conda的环境配置

1
conda config --show

设置镜像

conda有时候安装软件会非常慢。设置国内镜像的话可以使安装更快捷一些。

1
2
3
4
5
6
7
8
9
10
#设置清华镜像
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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
#设置bioconda
conda config --add channels bioconda
conda config --add channels conda-forge
#设置搜索时显示通道地址
conda config --set show_channel_urls yes

更新conda

将conda自身更新到最新版本。

1
conda update conda

更新Anaconda整体

将整个Anaconda都更新到确保稳定性和兼容性的最新版本

1
conda update Anaconda

查询某个命令的帮助

1
conda create --help

管理环境

Conda允许你创建相互隔离的独立环境,这些环境被称之为虚拟环境(Virtual Environment),这些环境各自包含属于自己的文件、包以及他们的依存关系,并且不会相互干扰。

Anaconda有一个缺省的名为base的环境。但是不建议把程序放在base环境中,应该创建不同的虚拟环境分别管理不同的开发项目。

创建虚拟环境

使用conda创建虚拟环境的命令格式为:

1
conda create -n <envname> <python版本>

例如 conda create -n env_name python=3.8
这表示创建python版本为3.8、名字为env_name的虚拟环境。

创建后,env_name文件可以在Anaconda安装目录envs文件下找到。在不指定python版本时,自动创建基于最新python版本的虚拟环境.

创建虚拟环境的同时安装必要的包

但是并不建议这样做,简化每一条命令的任务在绝大多数时候都是明智的(一个例外是需要反复执行的脚本)

conda create -n env_name numpy matplotlib python=3.8

查看已经安装成功的所有环境

以下三条命令都可以。注意最后一个是”–”,而不是“-”.

1
2
3
conda env list
conda info -e
conda info --envs

所显示的列表中,前面带星号“*“的表示当前活动环境。

激活虚拟环境

使用如下命令即可激活创建的虚拟环境。

1
conda activate env_name

此时使用python --version可以检查当前python版本是否为所想要的(即虚拟环境的python版本)。

退出虚拟环境

使用如下命令即可退出当前工作的虚拟环境。

1
conda deactivate

删除虚拟环境

执行以下命令可以将该指定虚拟环境及其中所安装的包都删除。

1
conda remove --name env_name --all

如果只删除虚拟环境中的某个或者某些包则是:

1
conda remove --name env_name  package_name

导出环境

很多的软件依赖特定的环境,我们可以导出环境,这样方便自己在需要时恢复环境,也可以提供给别人用于创建完全相同的环境。

1
2
3
4
#获得环境中的所有配置
conda env export --name myenv > myenv.yml
#重新还原环境
conda env create -f myenv.yml

包(Package)的管理

查询包的安装情况

查询看当前环境中安装了哪些包

1
conda list

查询当前Anaconda repository中是否有你想要安装的包

1
conda search package_name

当然与互联网的连接是执行这个查询操作乃至后续安装的前提条件.

查询是否有安装某个包

用conda list后跟package名来查找某个指定的包是否已安装,而且支持*通配模糊查找。

1
2
conda list pkgname
conda list pkgname*

当然如果你确认是否有某个包的目的是要对其进行更新的话,那就直接执行conda update pkgname即可,如果该包没有安装的话,conda会报告PackageNotInstalledError错误(然后改用conda install即可)。

包的安装和更新

在当前(虚拟)环境中安装一个包:

1
conda install package_name

当然也可以如上所述在创建虚拟环境的同时安装包,但是并不建议。安装完一个包后可以执行conda list确认现在列表中是否已经包含了新安装的包。

也可以以以下命令安装某个特定版本的包(以下例为安装0.20.3版本的numpy):

1
conda install numpy=0.20.3

可以用以下命令将某个包更新到它的最新版本 :

1
conda update numpy

安装包的时候可以指定从哪个channel进行安装,比如说,以下命令表示不是从缺省通道,而是从conda_forge安装某个包。

1
conda install pkg_name -c conda_forge

conda卸载包

1
conda uninstall package_name

这样会将依赖于这个包的所有其它包也同时卸载。如果不想删除依赖其当前要删除的包的其他包(但是并不建议用这种方式卸载):

1
conda uninstall package_name --force

清理anaconda缓存

1
2
3
conda clean -p      # 删除没有用的包 --packages
conda clean -t # 删除tar打包 --tarballs
conda clean -y -all # 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包)

关于清除命令的更详细的说明,可以执行以下命令进行查询:

1
conda clean -h

Python版本的管理

除了上面在创建虚环境时可以指定python版本外,Anaconda基环境的python版本也可以根据需要进行更改。

将版本变更到指定版本

1
conda install python=3.5

更新完后可以用以下命令查看变更是否符合预期。

1
python --version

将python版本更新到最新版本

如果你想将python版本更新到最新版本,可以使用以下命令:

1
conda update python

conda install vs pip install

区别

  • conda可以管理非python包,pip只能管理python包。

  • conda自己可以用来创建环境,pip不能,需要依赖virtual env之类的。

  • conda安装的包是编译好的二进制文件,安装包文件过程中会自动安装依赖包;pip安装的包是wheel或源码,装过程中不会去支持python语言之外的依赖项。

  • conda安装的包会统一下载到一个目录文件中,当环境B需要下载的包,之前其他环境安装过,就只需要把之间下载的文件复制到环境B中,下载一次多次安装。pip是直接下载到对应环境中。

  • conda只能在conda管理的环境中使用,例如比如conda所创建的虚环境中使用。pip可以在任何环境中使用,在conda创建的环境 中使用pip命令,需要先安装pip(conda install pip ),然后可以 环境A 中使用pip 。conda 安装的包,pip可以卸载,但不能卸载依赖包,pip安装的包,只能用pip卸载。

  • pip和conda在安装软件包时,在依赖关系方面的处理机制不同。pip在递归的串行循环中安装依赖项,不会确保同时满足所有软件包的依赖关系,如果按顺序较早安装的软件包相对于按顺序较晚安装的软件包具有不兼容的依赖项版本,则可能导致环境以微妙的方式被破坏掉;conda使用SAT(satisfiability)solver来验证是否满足环境中安装的所有软件包的所有要求,只要有关依赖项的软件包元数据正确,conda就会按预期产生可用的环境。

能否混用

首先,不建议混用。混用容易导致库的依赖关系出现混乱,然后突然哪天环境可能就崩了,安装不了新的包,无法进行conda update之类的。
其次,由于conda的库确实不如pip的库丰富{很多包只在 pip 有:PYPI有15万可用包,而Anaconda repository中(使用conda命令安装)提供了1,500多个软件包,Anaconda cloud上(使用conda-forge或bioconda命令安装)的几千种其他软件包。所以有时候可能迫不得已要使用pip安装。

安装路径

  • conda install xxx:这种方式安装的库都会放在anaconda3/pkgs目录下,这样的好处就是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载。
  • pip install xxx:分两种情况,一种情况就是当前conda环境的python是conda安装的,和系统的不一样,那么xxx会被安装到anaconda3/envs/current_env/lib/python3.x/site-packages文件夹中,如果当前conda环境用的是系统的python,那么xxx会通常会被安装到~/.local/lib/python3.x/site-packages文件夹中

如何判断区分通过conda还是pip安装

执行 conda list ,用pip安装的包显示的build项目为pypi。

conda configuration

conda的配置文件为".condarc",该文件在安装时不是缺省存在的。但是当你第一次运行conda config命令时它就被自动创建了。".condarc"配置文件遵循简单的YAML语法。

.condarc文件

执行conda info,会有信息显示如下所示:

condainfo

Channel管理

追加conda-forge channel:

1
conda config --add channels conda-forge

移除conda-forge channel:

1
conda config --remove channels conda-forge

查询当前配置中包含哪些channels

1
conda config --get channels

帮助

conda -help 或者 conda -h 通过这条命令可以查看学习其他命令的使用规范。

  • Title: anaconda-command-note
  • Author: Charles
  • Created at : 2023-08-27 08:44:36
  • Updated at : 2023-08-27 09:36:22
  • Link: https://charles2530.github.io/2023/08/27/anaconda-command-note/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments