conda常用命令

conda 可以安装数据、图片、Notebook 等,还可以管理 Python 包,和 Anaconda Navigator 功能类似。 conda安装包时,dependency 包也会一起自动安装。

查看版本

1
2
conda -V
conda --version

配置

1
2
3
4
5
6
7
8
9
10
# 显示所有配置
conda config --show
# 显示具体配置
conda config --show channels
# 添加
conda config --add channels XXX
# 设置
conda config --set show_channel_urls yes
# 删除
conda config --remove channels XXX

安装包

1
2
conda install *
conda install attrs=17.3
  • 这表示安装MAJOR = 17MINOR = 3 的最新 PATCH 的版本
  • 注意:有些包默认不是安装最新的,此时会有一些依赖问题(老板本包不兼容现在的一些新的包),所以最好用指定版本
1
conda install 'bar-lib=1.0|1.4*'
  • 安装bar-lib包的1.0版本或者1.4版本,并且注意符号'
1
conda install 'bar-lib>=1.3.4,<1.1'
  • 安装bar-lib包的区间内的版本。
1
2
3
# 指定通道
conda install -c conda-forge youtube-dl
conda install --channel https://conda.anaconda.org/anaconda tensorflow=1.8.0
  • youtube-dl包不再默认通道内,因此要给定-c(即--channel)指定通道(可以通过这里:Anaconda.org查找相关软件包以及通道)

更新包

1
2
3
4
# 更新多个包
conda update conda anaconda anaconda-navigator
# 更新所有包
conda update --all
  • 可以通过-n来指定所属的虚拟环境

删除包

1
conda remove PKGNAME

查询包

1
2
3
conda search attrs
# 或
conda list attrs

高级搜索:

1
conda search -c conda-forge -c sseefeld -c gbrener --platform win-64 textadapter
  • 查找发布者conda-forgesseefeldgbrener的包
  • -c表示--channel
  • --platform win-64限制了平台,还有osx-64可以参考
  • 可以通过这里:Anaconda.org查找相关软件包以及通道

这样可以安装自己需要的包,还能限制版本。

1
anaconda search boltons
  • anaconda search *可以查询包对应的channels和platforms。

查询依赖(dependency)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ conda info cytoolz=0.8.2=py36_0

cytoolz 0.8.2 py36_0
--------------------
file name : cytoolz-0.8.2-py36_0.tar.bz2
name : cytoolz
version : 0.8.2
build string: py36_0
build number: 0
channel : https://repo.continuum.io/pkgs/free
size : 352 KB
arch : x86_64
constrains : ()
date : 2016-12-23
license : BSD
md5 : cd6068b2389b1596147cc7218f0438fd
platform : darwin
subdir : osx-64
url : https://repo.continuum.io/pkgs/free/osx-64/cytoolz-0.8.2-py36_0.tar.bz2
dependencies:
python 3.6*
toolz >=0.8.0

如果需要使用*,就需要使用'引用起来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$ conda info 'cytoolz=0.8.2=py36*'

cytoolz 0.8.2 py36_0
--------------------
file name : cytoolz-0.8.2-py36_0.tar.bz2
name : cytoolz
version : 0.8.2
build string: py36_0
build number: 0
channel : https://repo.anaconda.com/pkgs/free/linux-64
size : 1.0 MB
arch : x86_64
constrains : ()
date : 2016-12-23
license : BSD
md5 : 857a2eef4ab39d987e493f5edf2e2163
platform : linux
subdir : linux-64
url : https://repo.anaconda.com/pkgs/free/linux-64/cytoolz-0.8.2-py36_0.tar.bz2
dependencies:
python 3.6*
toolz >=0.8.0

cytoolz 0.8.2 py36h708bfd4_0
----------------------------
file name : cytoolz-0.8.2-py36h708bfd4_0.tar.bz2
name : cytoolz
version : 0.8.2
build string: py36h708bfd4_0
build number: 0
channel : https://repo.anaconda.com/pkgs/main/linux-64
size : 364 KB
arch : None
constrains : ()
license : BSD 3-Clause
md5 : 92977087dc2a463e99a1d993f81f40dd
platform : None
subdir : linux-64
timestamp : 1505740267776
url : https://repo.anaconda.com/pkgs/main/linux-64/cytoolz-0.8.2-py36h708bfd4_0.tar.bz2
dependencies:
libgcc-ng >=7.2.0
python >=3.6,<3.7.0a0
toolz >=0.8.0

版本号

  • MAJOR.MINOR.PATCH,其中:
    • MAJOR:主版本号。当引入了重要的新功能时(通常会进行相应的API更改),MAJOR会增加

    • MINOR:一般是一些改进(如新功能),避免产生向后不兼容的API

      • 在API中添加一个可选参数(允许旧代码不变地运行)
    • PATCH:修复错误

更多可以看这里

查看所有安装包的版本

1
2
3
4
5
6
7
8
9
conda list
conda list --export > package-list.txt
conda list pandas

$ conda list 'numpy|pandas'
# packages in environment at /home/repl/miniconda:
## Name Version Build Channel
numpy 1.14.0 py36h3dfced4_1
pandas 0.22.0 py36hf484d3e_0

conda list配合正则化标准可以查询对应的格式

1
2
$ conda list -n pd-2015 'pandas|numpy'
$ conda list --name pd-2015 'pandas|numpy'
  • -n指定对应的安装环境

新建环境

1
conda create --name base2 python=3.6

或者通过yml文件来新建:

1
conda env create --file base2.yml -n base2

yml文件里面一般有name,因此可以不写:

1
2
3
4
5
6
7
8
(base) $ cat shared-config.yml
name: functional-data
channels:
- defaults
dependencies:
- python=3
- cytoolz
- attrs

删除环境

1
conda env remove --name ENVNAME

导出环境

1
(base) $ conda env export -n course-env -f course-env.yml
  • 将环境导出成yml格式
  • -f等于--file

环境切换

1
2
3
4
5
6
7
8
9
10
11
12
13
(base) $ conda activate course-env
(course-env) $ conda env list
# conda environments:
#
course-env * /.conda/envs/course-env
pd-2015 /.conda/envs/pd-2015
py1.0 /.conda/envs/py1.0
test-env /.conda/envs/test-env
base /home/repl/miniconda

(course-env) $ conda activate pd-2015
(pd-2015) $ conda deactivate
(base) $
  • conda activate *切换环境
  • conda deactivate切回默认环境

查询所有环境

1
2
3
4
5
6
7
8
9
$ conda env list
# conda environments:
#
course-env /.conda/envs/course-env
pd-2015 /.conda/envs/pd-2015
py1.0 /.conda/envs/py1.0
test-env /.conda/envs/test-env
base /home/repl/miniconda
course-project * /home/repl/miniconda/envs/course-project
  • *表示目前的环境

清理

1
2
3
conda clean -p      # 删除没有用的包(检查哪些包没有在包缓存中被硬依赖到其他地方,并删除它们)
conda clean -t # 删除tar包
conda clean -y --all # 删除所有的安装包及cache

cuda路径设置

CUDA Toolkit安装

区别

在使用 Anaconda 安装 Pytorch 深度学习框架时,可以发现 Anaconda 会自动为我们安装 cudatoolkit。但是 cudatoolkit 与通过 Nvidia 官方提供的 CUDA Toolkit 是不一样的:

  • 官方CUDA Toolkit:一个完整的工具安装包。提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。可以安装、开发 CUDA 程序所需的工具,包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。具体组成可参考 CUDA Toolkit Major Components.
  • Anaconda中cudatoolkit:主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit

所以需要手动安装 CUDA Toolkit ,可以根据不同环境中的cudatoolkit来决定下载的版本:

1
2
3
4
# 直接查看cudatoolkit版本
conda list | grep cuda
# 或者查看pytorch所用的cuda版本
conda list | grep pytorch
  • 注意,不能通过如下方法获得版本:

    1
    2
    import torch
    torch.version.cuda #输出一个 cuda 版本
    • 上述是位于 torch/version.py 中的一个变量,在基于源码进行编译时确定
  • 但是可以通过如下方法:

    1
    2
    import torch.utils.cpp_extension
    torch.utils.cpp_extension.CUDA_HOME #输出 Pytorch 运行时使用的 cuda
    • 直接输出环境变量 CUDA_HOME

安装

官方安装指导手册链接:Installation Guide Linux

一般来说推荐直接下载deb(local)直接安装即可,所有东西都会默认配置完毕。

默认情况下,CUDA Toolkit会:

  • 安装CUDA驱动
  • 安装CUDA Toolkit,默认在/usr/local/cuda-xx.x,并链接到/usr/local/cuda
  • 安装CUDA Samples,默认在$(HOME)/NVIDIA_CUDA-xx.x_Samples

但是在没有root权限的机器上,推荐下载runfile(local),并通过如下命令交互式安装到当前家目录下:

1
sh cuda_xxxx_linux.run --toolkit --toolkitpath=<path> --silent
  • --driver:安装CUDA驱动
  • --toolkit:安装CUDA Toolkit
    • --toolkitpath=<path>:CUDA Toolkit路径(绝对路径)
  • --samples:安装CUDA Samples
    • --samplespath=<path>:CUDA Samples路径(绝对路径)
  • --silent:静默安装,需要上述至少一个选项
  • --override:忽略编译器,第三方库和工具包检测检查,这些检查将阻止CUDA Toolkit和CUDA Samples的安装。

虚拟环境设置

不同的虚拟环境需要配上不同的cuda版本,此时需要设置CUDA_HOMELD_LIBRARY_PATH等环境变量,这里可以借助conda的配置脚本activate.shdeactivate.sh

首先找到conda的安装路径:

1
2
3
4
# 激活环境
conda activate pytorch
# 输出该环境的路径
echo ${CONDA_PREFIX}

假设得到的路径为:/home/username/anaconda3/envs/pytorch,则新建文件夹并编写脚本:

1
2
3
4
# 建立激活环境下的文件夹
mkdir -p /home/username/anaconda3/envs/pytorch/etc/conda/activate.d
# 编写脚本
vi /home/username/anaconda3/envs/pytorch/etc/conda/activate.d/activate.sh

脚本内容为:

1
2
3
4
ORIGINAL_CUDA_HOME=$CUDA_HOME
ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-10.1
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
  • 默认nvccCUDA_HOME/bin
  • 通过执行echo $CUDA_HOME能够查看修改后的变量即可

退出脚本路径及内容如下:

1
2
3
4
#建立退出环境下的文件夹
mkdir -p /home/username/anaconda3/envs/pytorch/etc/conda/deactivate.d
#写入脚本
vi /home/username/anaconda3/envs/pytorch/etc/conda/deactivate.d/deactivate.sh

内容:

1
2
3
4
export CUDA_HOME=$ORIGINAL_CUDA_HOME
export LD_LIBRARY_PATH=$ORIGINAL_LD_LIBRARY_PATH
unset ORIGINAL_CUDA_HOME
unset ORIGINAL_LD_LIBRARY_PATH