前言

发现每次用conda的时候都要去百度找命令,故在此记录我最常用到的命令,以方便我或者其他人查找使用!此外,除了conda的使用,此博客还记录了一些常用深度学习库的安装及配置的踩坑记录,以及一些冷门但较重要的环境细节。

1 常用命令

以下所有命令在2021-01-28被验证可用!另附官方文档

1.1 Conda基本配置

# 更新conda至最新版本,也会更新其它相关包
conda update conda

# 添加清华源
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/

# 设置搜索时显示通道地址
conda config --set show_channel_urls yes
# windows系统使用此命令后,会在你的C:\Users\用户名文件夹下会生成.condarc文件,在此文件里可以直接编辑(添加、删除)各种源

# 查看已经添加的源
conda config --get channels

# 恢复默认源
conda config --remove-key channels

附链接:清华源, 中科大源, 上交源

1.2 环境管理

1.2.1 常用命令

# 查看已存在的环境
conda env list

# 创建指定python版本的虚拟环境(如果只写python=2,那么conda会自动寻找2.x中的最新版本)
conda create -n test python=2.7

# 删除某个环境
conda remove -n test --all

# 完整复制某个环境
conda create -n test2 -clone test

# 进入虚拟环境(windows系统此命令可以省略前面的conda)
conda activate test

# 退出虚拟环境
conda deactivate

1.2.2 conda环境管理中的一个细节

在使用conda后,会发现命令提示符前多了一个(base),这其实是conda自带的一个基础环境,而且每次登录后都会默认激活该环境:

(base) [hanyuchen@IP-xxx-xxx-xx-xx ~]$

当然,可以通过conda deactivate命令来退出(base)环境:

[hanyuchen@IP-xxx-xxx-xx-xx ~]$

但退出(base)后,会发现之前在(base)环境下使用conda安装的很多库,就无法导入了,比如import torch,遂上网寻找答案,比如这个。不过似乎对我没用,所以我目前的解决方案是:

只使用(base)环境和新建的环境即可,不退出(base)环境

1.3 包管理

# 在指定环境安装包并指定版本,如果不用-n指定环境名称,则被安装在当前活跃环境
conda install -n test package=x.x

# 查看当前环境的所有包
conda list

2 常出现的错误

2.1 python相关

2.1.1 启动时的interactivehook UnicodeDecodeError

具体报错如下:

Failed calling sys.__interactivehook__
Traceback (most recent call last):
  ...
  File "D:\My_Programs\Anaconda\lib\site-packages\pyreadline\lineeditor\history.py", line 82, in read_history_file
    for line in open(filename, 'r'):
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 34: illegal multibyte sequence

原因: 记录历史命令的过程中遇到过中文,始终无法解码。具体分析过程见(参考)
解决方案: 找到自己的‘history.py’文件,在读取文件的代码处添加’encoding=utf-8’,如下所示:

for line in open(filename, 'r', encoding='utf-8'):

2.1.2 Win10系统Ipython异常,中止I/O操作

具体报错如下:

Unhandled exception in event loop:
  ...
Exception [WinError 995] The I/O operation has been aborted because of either a thread exit or an application request
Press ENTER to continue...

解决方案:pip install --upgrade prompt-toolkit==2.0.10即可。具体讨论见this issue

2.2 anaconda-navigator 不能正常启动

如果错误提示中明显能够看到pyQt5相关条目,并且anaconda prompt可以运行,则说明核心模块安装正确,是UI(界面插件)的问题

原因: 界面插件损坏
解决方案:

  1. 直接删除%安装目录%\Lib\site-packages\pyQt5目录,以及所有包含‘pyQt5’的目录
  2. 进入cmd,输入pip install pyQt5

2.3 PyTorch安装相关

2.3.1 PyTorch与CUDA

安装PyTorch(gpu)最关键的就是要将Pytorch版本CUDA版本以及系统的驱动版本(driver version) 三者匹配起来。(版本对应关系表)

举个例子:

  1. 我想使用1.6版本的PyTorch
  2. 使用nvcc -V查看我现在的CUDA版本为10.1
  3. 使用nvidia-smi查看到driver version为418.67
  4. 版本对应关系表中发现PyTorch1.6可以搭配CUDA10.1或9.2,但是CUDA10.1需要driver version>=418.96,我明显不满足(跑程序的时候也会提示设备版本too old)
  5. 所以选择安装cuda9.2,在(官方提供的安装命令)中可以很容易的找到对应的安装命令如下:
    # CUDA 9.2
    pip install torch==1.6.0+cu92 torchvision==0.7.0+cu92 -f https://download.pytorch.org/whl/torch_stable.html
    

2.3.2 PyTorch检查CUDA是否可用

import torch
print(torch.__version__)
print(torch.cuda.is_available())

2.4 tensorflow-gpu安装相关

2.4.1 依赖的gpu环境

例:tensorflow_gpu-1.14.0需要安装cuDNN:7.4,CUDA:10。这是经过测试的构建配置

查看CUDA版本: 命令行输入nvcc --version
查看cuDNN版本: 全局搜索’cudnn.h’,在最上方的几个宏定义处即显示其版本,例如下面所展示的就是7.6.5:

...
#if !defined(CUDNN_H_)
#define CUDNN_H_

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5

附:Linux 和 Windows 查看 CUDA 和 cuDNN 版本

2.4.2 tf-1.14.0与其他库版本不匹配系列

直接conda install tensorflow-gpu=1.14,然后进入Python环境尝试导入,发现以下警告:

FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecate

原因: numpy版本不适应
解决方案: numpy降级即可。例:tf-1.14.0、np-1.17.1时出现报错,就将numpy改为pip install numpy==1.16.0即可(参考)

另有以下报错:

'h5py.h5r.Reference' has no attribute '__reduce_cython__' 

原因: 预计是h5py版本不匹配
解决方案: 降低h5py版本即可。pip install h5py==2.8.0 (参考)

2.5 网络相关

2.5.1 代理错误ProxyError

使用conda需要联网的命令时,出现以下报错:

ProxyError: Conda cannot proceed due to an error in your proxy configuration.
Check for typos and other configuration errors in any '.netrc' file in your home directory,
any environment variables ending in '_PROXY', and any other system-wide proxy
configuration settings.

原因: 使用了科学上网软件,或者在公司代理下,但是没有对conda进行相关配置(参考)
解决方案: windows下:在 “设置-网络和internet-代理-手动设置代理” 处查看ip地址端口号,将其添加在.condarc文件中,形式如下:

proxy_servers:
    http: http://username:password@corp.com:8080
    https: https://username:password@corp.com:8080

参考资料

  1. conda简直神了[conda基本废了]
  2. conda的安装与使用(目前这篇文章也在持续更新)
  3. anaconda conda环境管理命令