对于Anaconda,在Windows下挺好用的;对于Ubuntu下,我觉得使用系统自带的Python2和Python3挺方便的,所以内心一直拒绝详细了解Anaconda,直到最近发现实验室电脑环境乱的简直了。所以乖乖的学习下Anaconda的虚拟环境管理机制。
Anaconda简介与安装
Anaconda的版本分为Anaconda2和Anaconda3,大家可以自行下载日常常用的版本,提供32位和64位下载。但是这个版本只是说明Anaconda自带的Python版本,我们可以使用任何一个版本的Anaconda创建任意一个新的Python环境,例如可以使用Anaconda2创建一个Python3.6的环境,当然也可以使用Anaconda3创建一个新的Python2.7的环境。
windows安装
对于Windows,若没有将Anaconda添加到环境变量,且需要在非anaconda prompt,则需要在windows系统环境变量中添加:
1 |
D:\Anaconda3 |
Linux安装
1 |
# lh |
若
/root
文件夹为
dr-xr-x---
,则需要使用
chmod 755 /root
设置一下权限。
更换Anaconda源
Anaconda安装成功之后,我们需要修改其包管理镜像为国内源。
Anaconda清华源官网建议直接修改用户目录下的
.condarc
文件。Windows 用户无法直接创建名为
.condarc
的文件,可先执行
conda config --set show_channel_urls yes
生成该文件之后再修改。
1 |
channels: |
运行
conda clean -i
清除索引缓存,保证用的是镜像站提供的索引。
若出现错误
CondaHTTPError: HTTP 000 CONNECTION FAILED for url
,则将上面的
https
改为
http
。
更换完Conda源后,可以使用下面指令查看当前源的配置信息:
1 |
conda info |
使用conda安装Pytorch:
conda install pytorch torchvision cudatoolkit=9.0
。
conda换回默认源
1 |
conda config --remove-key channels |
虚拟环境
生成虚拟环境
1 |
conda create -n name python=version |
1 |
conda create -n zd38 python=3.8 |
激活与退出虚拟环境
在Windows系统中,通过
activate py27
和
deactivate py27
命令激活、退出该环境。
1 |
语法格式:source activate name |
在Linux和OS系统下,退出虚拟环境
conda deactivate
使用其它用户的环境
如果想要使用其它用户的环境,我们假设其它用户test1的环境位置在
/dockerdata/test1/.conda/envs/
,该路径下的环境为:
1 |
(zd310) test1@ubuntua:~$ lh /dockerdata/test1/.conda/envs/ |
假设新的用户为test2,且home路径位于
/dockerdata/test2
,若想使用test1用户的环境,需要在
/dockerdata/test2/.condarc
添加:
1 |
envs_dirs: |
当然若不配置,通过
conda activate /dockerdata/test1/.conda/envs/zd310
也可以激活环境。暂时不清楚两者的区别。
Anaconda常用指令
更新conda
1 |
# 确认conda已安装 |
其中更新命令不仅仅会更新conda的版本,同时会自动更新相关的包,
其实,我们也可以使用这个命令来更新Anaconda版本
1 |
conda update anaconda |
包管理
1 |
# 查看所有已安装的软件包 |
可用的完整软件包列表可以在
http://docs.continuum.io/anaconda/pkg-docs.html
中查找,
所有的软件包都按照Python的版本进行了分类
当我们想要安装某个软件包时,可以直接在命令行中进行查找并安装
1 |
# 查找软件包 |
另外,也可以 http://anaconda.org 网站上搜索想要的软件包,根据页面上的提示执行相应的命令即可安装
最后,在激活新环境后,我们所做的操作便都是在新环境下的,包括pip命令来安装第三方库
。我们来试一下在Windows下使用pip安装lxml。
1 |
pip install lxml |
不出所料…失败了…如果你执意要自己解决这个问题,会很复杂,至少我在小白阶段直接放弃了解决这个问题…
那么正确的做法是什么呢?一条命令就够了。
1 |
conda install -n py27 lxml |
当然了,对于可以正常安装的库,自然可以使用pip命令。
另外,一般使用Anaconda安装包的指令为
conda install 包名
。
对于
conda
来说,其实python也是一个软件包,所以,
python
的管理基本和软件包管理相同
查找可用python版本:
1 |
conda search --full-name python |
本地包安装
从
这里
可以下载Pytorch的离线安装包。例如,当本地包名为
pytorch-1.3.0-py3.7_cuda10.0.130_cudnn7.6.3_0.tar.bz2
,将其放到
~/.conda/pkgs
目录,然后安装:
1 |
cd ~/.conda/pkgs |
科学计算包
1 |
conda install -n py27 anaconda |
环境拷贝和备份
其实,还可以复制一个和指定环境完全相同的环境,只要在创建时添加
--clone
参数指定相应的环境名称即可
1 |
# 复制环境 |
另外,环境也可以在不同机器之间进行复制,只要将要复制的环境导出为
*.yml
配置文件,再到指定机器上创建时指定配置文件即可
1 |
# 导出配置文件 |
查看已有环境
删除指定环境
通过
conda remove -n env_name --all
来删除指定的环境(如果不添—all参数,而是指明某个库名,则是删除该库)。
删除空闲包
1 |
conda clean -p //删除没有用的包 |
pip使用
当使用命令激活一个环境,例如
conda activate zdaiot
后直接使用
pip
命令是系统的
pip
,安装路径也有问题。解决方法为:
1 |
conda install pip |
1 |
/home/lab3/anaconda3/envs/zdaiot/bin/pip install Pillow |
Anaconda移动
当因为某些原因需要移动Anaconda文件夹时,移动后记得使用
ln -s
在原位置建立一个软连接。
Anaconda卸载
对于Linux下,直接删除Anaconda文件夹,然后到
~/.bashrc
文件中删除掉相应的Anaconda环境。接着重启终端即可。
miniconda使用
我安装的miniconda自带Python3.7,使用
conda init
指令可以激活这个环境。并且在不同的终端都会生效。
在某一个终端中,若不想激活,可以使用
conda deactivate
命令在该终端中取消激活(仅对于当前终端取消激活)。在该终端中再次使用
conda activate
激活。
在激活环境中,可以pip直接安装,不要加sudo。直接敲pip会随着当前Python虚拟环境改变而改变。
使用jupyter Notebook
1 |
conda install nb_conda |
在终端输入
jupyter-notebook
的时候,点击
Conda
如下图所示,
Jupyter Notebook多版本Python并存
我们已经说完了Anaconda中的包管理,那么既然Anaconda中可以使Python 2.x和3.x共存,Jupyter Notebook是否可以呢?
在这里我们不展开来介绍Jupyter Notebook,因为后面还会专门再写一篇,大家可以先初步了解。多版本的Python或者R等语言,在Jupyter中被称作kernel。
如果想要给Jupyter添加多个Python版本的kernel,有两种做法。
如果这个Python版本已经存在(比如我们刚才添加的py27环境),那么你可以直接为这个环境安装ipykernel包。即:
1 |
conda install -n py27 ipykernel |
1 |
python -m ipykernel install --user |
如果所需版本并不是已有的环境,可以直接在创建环境时便为其预装ipykernel。
1 |
conda create -n py27 python=2.7 ipykernel |
安装深度学习环境
本来这个部分没啥好说的,但是如果想使用离线安装包的话,这里就得记录一下。
cuda 与 cudatoolkit 的区别
在使用 Anaconda 安装 Pytorch 等深度学习框架时,可以发现 Anaconda 会自动为我们安装 cudatoolkit。这里安装的 cudatoolkit 与通过 Nvidia 官方提供的 CUDA Toolkit 是不一样的。具体而言,Nvidia 官方提供的 CUDA Toolkit 是一个完整的工具安装包,其中提供了 Nvidia 驱动程序、CUDA 程序相关的开发工具包等的安装选项。通过 Nvidia 官网提供的 CUDA Toolkit 安装的是完整的 CUDA 开发工具,包括 CUDA 程序的编译器、IDE、调试器等应用程序,CUDA 所支持的功能所对应的各式库文件以及它们的头文件等,具体的组成可参考 CUDA Toolkit Major Components .
实际上,Nvidia 官方提供安装的 CUDA Toolkit 包含了进行 CUDA 相关程序开发的编译、调试等过程相关的所有组件。但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行( Pytorch 本身与 CUDA 相关的部分是提前编译好的 ),就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。故而,Anaconda 在安装 Pytorch 等会使用到 CUDA 的框架时,会自动为用户安装 cudatoolkit,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。在 安装了 cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit .
在大多数情况下,上述 cudatoolkit 是可以满足 Pytorch 等框架的使用需求的。但对于一些特殊需求,如需要为 Pytorch 框架添加 CUDA 相关的拓展时( Custom C++ and CUDA Extensions ),需要对编写的 CUDA 相关的程序进行编译等操作,则需安装完整的 Nvidia 官方提供的 CUDA Toolkit.
注意下面的离线安装方法暂时都无法正常使用,因为无法解决依赖问题。所以不推荐使用,等待日后再有时间再弄。
安装cudatoolkit和cudnn
在线安装
对于在线安装的话,直接使用下面方法即可,注意可以指定特定的cuda版本。
1 |
conda install tensorflow tensorboard cudatoolkit=10.0 |
离线安装
从
这里
搜索
cudatoolkit
和
cudnn
,找到相应版本的
tar.bz2
包(注意cudnn版本和cuda版本要对应),下载之后使用如下命名安装:
1 |
conda install --use-local cudatoolkit-xxx.tar.bz2 cudnn-xxx.tar.bz2 |
其中,
xxx
表示省略的文件名。
安装tensorflow
在线安装
对于在线安装的话,直接使用下面方法即可,注意可以指定特定的cuda版本。
1 |
conda install tensorflow-gpu tensorboard cudatoolkit=10.0 |
离线安装
首先,使用如下命令得到conda源的
main
下各个安装包的依赖关系:
1 |
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/repodata.json |
在下载好的
repodata.json
文件中搜索
tensorflow-base-版本号-gpu_py版本
。例如搜索
tensorflow-base-1.14.0-gpu_py370
,可以找到8个这样的文件,其中有4个是
tag.bz2
格式的文件,在这4个
tar.bz2
文件名对应的字典中有其详细的依赖信息,根据cudatoolkit、cudnn版本号可以唯一对应出一个文件。例如当cudatoolkit 为10.0,cudnn为7.6.4时,对应的
tensorflow-base-版本号-gpu_py版本
文件名为
tensorflow-base-1.14.0-gpu_py37h8d69cac_0.tar.bz2
。在
这里
搜索该文件名,直接下载即可。或者使用
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/文件名
。
也就是Python版本和cudatoolkit版本,唯一确定一个文件。
另外因为
tensorflow-base
文件命名比较乱,所以直接通过文件名可能看不出来对应的cuda和cudnn版本。可以下载下来,然后解压,看
info/index.json
文件,即可看到其中的依赖信息。其实它的命名是有规律的,这里总结如下:
tensorflow-base文件名 | cudatoolkit版本 | cudnn版本 |
---|---|---|
he45bfe2 | 10.1 | >=7.6.0, <8.0a0 |
h8f37b9b | 9.0 | >=7.3.1, <8.0a0 |
h611c6d2 | 9.2 | >=7.3.1, <8.0a0 |
h8d69cac | 10.0 | >=7.3.1, <8.0a0 |
接着在同一个
repodata.json
文件中搜索
tensorflow-版本号-gpu_py版本
,例如
tensorflow-1.14.0-gpu_py37
。同样的有8个这样的文件,其中有4个是
tag.bz2
格式的文件,在这这4个
tar.bz2
文件名对应的字典中有其详细的依赖信息,根据
tensorflow-base
的名称可以唯一对应出一个文件。例如当
tensorflow-base
的名称为
tensorflow-base ==1.14.0 gpu_py37h8d69cac_0
时,对应的
tensorflow-版本号-gpu_py版本
文件为
tensorflow-1.14.0-gpu_py37h4491b45_0.tar.bz2
。在
这里
搜索该文件名,直接下载即可。或者使用
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/文件名
。
也就是Python版本和cudatoolkit版本,唯一确定一个文件。
然后在同一个
repodata.json
文件中搜索
tensorflow-gpu-版本号
,例如
tensorflow-gpu-1.14.0
。可以找到两个这样的文件,其中一个是
tar.bz2
文件,例如这里搜索的文件名为
tensorflow-gpu-1.14.0-h0d30ee6_0.tar.bz2
,在
这里
搜索该文件名,直接下载即可。或者使用
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/文件名
。
也就是不管什么Python版本,也不管什么cudatoolkit版本,都只有这一个文件。
接着,使用如下命令得到conda源的
main
下各个安装包的依赖关系:
1 |
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/repodata.json |
在下载好的
repodata.json
文件中搜索
tensorflow-estimator-版本号-py版本
,例如
tensorflow-estimator-1.14.0-py37
。可以找到两个这样的文件,其中一个是
tar.bz2
文件,例如这里搜索的文件名为
tensorflow-estimator-1.14.0-py37h5ca1d4c_0.tar.bz2
,在
这里
搜索该文件名,直接下载即可。或者使用
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/文件名
。
也就是只要确定了Python版本,不管什么cudatoolkit版本,都只有这一个文件。
接着在相同的文件中搜索
tensorboard-版本号-py版本
,例如
tensorboard-1.14.0-py37
。可以唯一确定一个文件,例如这里找到的文件名称为
tensorboard-1.14.0-py37_0.tar.bz2
。在
这里
搜索该文件名,直接下载即可。或者使用
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/文件名
。
也就是只要确定了Python版本,不管什么cudatoolkit版本,都只有这一个文件。
下载完这几个安装包后。按照如下命令安装这个五个文件:
1 |
conda install --use-local tensorflow-base-1.14.0-gpu_py37h8d69cac_0.tar.bz2 tensorflow-1.14.0-gpu_py37h4491b45_0.tar.bz2 tensorflow-gpu-1.14.0-h0d30ee6_0.tar.bz2 tensorflow-estimator-1.14.0-py37h5ca1d4c_0.tar.bz2 tensorboard-1.14.0-py37_0.tar.bz2 |
当Python版本固定时,若需要调整cudatoolkit版本,需要更改上面的第一个
tensorflow-base
和
tensorflow
两个文件名;而当Python版本不定时,需要更改
tensorflow-base
、
tensorflow
、
tensorflow-estimator
和
tensorboard
文件名。
最后,还要使用如下命令解决依赖问题:
1 |
conda install tensorflow-gpu |
但是在使用这个命令安装tensorflow-gpu修复依赖时会再下载一次安装包,这就没有离线安装的意义的。这个问题暂时没有解决。现阶段貌似只能手动安装依赖。
安装Pytorch
在线安装
对于在线安装的话,直接使用下面方法即可,注意可以指定特定的cuda版本。
1 |
conda install pytorch torchvision cudatoolkit=10.0 |
离线安装
从
这里
搜索
pytorch
和
torchvision
,下载相应的
tar.bz2
包。下载之后使用如下命名安装:
1 |
conda install --use-local pytorch-xxx.tar.bz2 torchvision-xxx.tar.bz2 |
其中,
xxx
表示省略的文件名。
导出Yaml
1 |
conda env export > 环境名.yaml |
1 |
conda env create -f 环境名.yaml |
bug
bug1
1 |
EnvironmentNotWritableError: The current user does not have write permissions to the target environment. |
解决方法:需要更改miniconda文件夹的权限,否则写不进去。我这里的安装路径为
/home/zdaiot/miniconda3/
,用户名为
zdaiot
1 |
sudo chown -R zdaiot /home/zdaiot/miniconda3/ |
bug2
莫名其妙的pip环境混乱了,提示什么
from pip._internal import main ModuleNotFoundError: No module named 'pip'
,解决方法:
1 |
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py |
bug3
1 |
conda install pytz |
bug4
若报错
ModuleNotFoundError: No module named 'yaml'
,类似于这样的,明明已经安装过了,但是还是报错。解决方法为先使用pip卸载,然后在使用conda安装。
bug5
bug6
1、若在Pycharm下运行,此时需要在需要在Pycharm执行配置中添加一行配置:
1 |
CONDA_DLL_SEARCH_MODIFICATION_ENABLE=1 |
1 |
import os |
疑惑
参考
最省心的Python版本和第三方库管理——初探Anaconda
Anaconda 使用技巧之:创建虚拟环境
Why does ‘(base)’ appear in my anaconda command prompt?
ModuleNotFoundError: No module named ‘pip._internal’
Erroneous Environments Showing up in Conda Nb tab with error
Anaconda使用入门
服务器 conda时错误提示 The following specifications were found to be conflict:tensorflow
Anaconda清华镜像源的使用及安装Pytorch失败问题解决
conda 使用本地包安装
Pytorch 使用不同版本的 cuda
Using Pip to install packages to Anaconda Environment
linux上anaconda的卸载
解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url问题
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available
(Anaconda)ImportError: DLL load failed while importing win32file: 找不到指定的模块。
numpy-mkl-library-load-failed
Setting CONDA_DLL_SEARCH_MODIFICATION_ENABLE env variable breaks pip installation of tensorflow-gpu #11693