Windows配置深度学习环境详细教程(二):conda工具的使用
序言
对于想要入门Python或者深度学习的初学者而言,配置环境一直是一个令人头疼的问题。相信有许多人经历过安装第三方包失败,安装好了却在使用中报错,安装CUDA、tensorflow、pytorch版本不匹配等等令人头大的问题,我也曾被这些问题所困扰。经过这两三年时间中反复重装环境的痛苦过程,直到现在我才逐渐能够独立、流畅地配制出一个令人满意的环境。在这个过程中,我也帮助了许多遇到这些问题的朋友,收获了一些经验教训,因此我希望将这一完整的过程写成博客,帮助在这方面遇到困难的人。
在这个系列的博客中,我计划详细介绍如下环境在Windows下的配置,后续有时间还会更新Ubuntu下的配置方法。
- 安装Pycharm和Miniconda
- 介绍conda虚拟环境配置工具(本篇)
- 安装CUDA、tensorflow和pytorch
- 多版本CUDA、tensorflow和pytorch共存
conda环境介绍
在Pycharm中打开Terminal,可以注意到命令行路径的前面有一个(pythonProject),这个括号里的内容,就是当前conda虚拟环境的名称。
使用conda env list命令,可以查看当前Miniconda中的所有conda环境,每个conda虚拟环境之间是相互隔离互不影响的。base环境是Miniconda自带的基本虚拟环境,中间有 * 星号标志的是当前所在的环境。
让我们打开Miniconda的安装目录(base环境后面的目录,我这里是D:\miniconda3)看下其中的目录结构。
在D:\miniconda3的根目录下,有几个重要的文件(夹),分别是envs/、Lib/、Scripts/、python.exe。
- 根目录下的python.exe其实就是base环境中运行的python,这个python的版本就是你下载Miniconda的python的版本。
- base环境中安装的第三方包都放在Lib/site-packages/目录下。
- Scripts/目录中包含了一些常用的脚本命令文件,包括conda、pip等,我们平常在终端输入命令就是调用的这里的脚本。
- envs/中包含了所有由用户创建的虚拟环境。打开envs/目录,可以看到当前的目录中有一个pythonProject文件夹,这就是我们刚才创建项目的同时新创建的虚拟环境。打开这个文件夹,我们会发现其中的目录结构与根目录基本一致,其中文件夹的作用也和base环境相同,但是这里python的版本则与我们创建环境时所指定的版本相同。
现在我们再来看上一篇中创建项目时的这张图片,就不难理解其中Location、Python version和Conda executable的含义了。
此时我们就可以来了解Make available to all projects选项的作用了,它的含义其实就是当我们在虚拟环境中安装第三方包的时候,同时也在base环境中安装一份。即在D:\miniconda3\envs\pythonProject\Lib\site-packages中下载第三方包时,复制一份到D:\miniconda3\Lib\site-packages中。
使用conda命令
因为初学者经常会一些概念不清,在不同环境下了安装第三方包却无法正常调用,所以强烈建议不要直接使用base环境。同时为了更好地学习conda命令,我们重新从零开始创建一个conda虚拟环境。打开cmd命令行或者Pycharm中的Terminal终端输入命令,这里我使用cmd进行操作。
conda换源
- 因为conda的默认源在国外,下载第三方包非常缓慢,因此需要先更换为conda的清华源。打开清华源官网https://mirrors4.tuna.tsinghua.edu.cn/help/anaconda/。
-
首先复制conda config --set show_channel_urls yes这行命令到cmd并执行。
-
然后用记事本打开用户目录下的.condarc文件(打开C盘->用户->你的用户名->.condarc文件,注意condarc前的点)。
- 将红框中的文字复制到.condarc文件中并保存。
- 在cmd中执行conda clean -i命令。
使用conda创建环境与安装第三方包
首先使用conda create -n NAME [python=3.8] [-y]命令创建一个新的环境,中括号表示可选项,将NAME替换为新环境的名称。
如果输入python=3.8则可以创建一个python版本为3.8的环境,否则默认创建一个与base环境相同python版本的环境。这里强烈建议加上python=3.8这个参数,原因在下一小节中会提到。
如果输入-y参数可以跳过后面确认安装的步骤。这里的python=3.8还可以替换成其他的第三方包,或者同时输入多个包并以空格形式隔开,conda会自动解析其依赖并直接安装好。
conda create -n NAME
conda create -n NAME -y
conda create -n NAME python
conda create -n NAME numpy
conda create -n NAME python=3.9 numpy
conda create -n NAME python=3.9 numpy=1.20
这里我输入conda create -n test python=3.8 numpy命令,然后输入y确定,就会创建一个名为test的,python版本为3.8的,包含numpy的conda虚拟环境。
创建好之后,可以使用conda activate test激活该环境(使用Pycharm的Terminal时需要新另开一个Terminal终端)。
使用conda list可以查看该虚拟环境中安装的所有第三方包,可以发现numpy已经安装好,并且python的版本为3.8.10(写博客时python3.8中最新的版本)。
在conda环境中正确使用pip
太长不看版:请务必使用conda create -n NAME python来创建虚拟环境,确保在创建环境时就安装了python和pip,这样在conda虚拟环境中安装第三方包时可以直接使用pip的所有命令。
详细说明版
如果conda环境中安装了python,那么直接使用pip即可将第三方包安装在当前的虚拟环境中,因为安装python时默认会同时安装pip包到该虚拟环境中。因此强烈建议在创建conda环境的同时加上python包参数。
如果创建conda时只使用conda create -n NAME创建了一个空环境,那么直接使用pip命令会将第三方包安装到base环境中。此时需要先使用conda install python命令安装python才能正常地在虚拟环境中使用pip。
例如,我使用conda create -n test python=3.8 numpy命令创建了test虚拟环境,使用conda create -n test1命令创建了test1虚拟环境。通过使用where pip命令和where python命令进行直观地对比,可以看出默认的pip和python命令是哪个。同时输出多个路径时(test环境中的where pip和where python),会默认使用第一个位置。
有些同学在安装Miniconda或Anaconda之前安装过独立的Python,或者是Windows自带的Python。这个Python是直接安装在了用户目录下的(C:\Users\username\AppData\Local\Microsoft\WindowsApps\python.exe),如果担心当前使用的是这个自带的python环境,也可以使用where python和where pip命令进行查看。
值得一提的是很多教程中会使用--user作为pip命令的参数,该命令的作用是在用户目录(C:\Users\username\AppData\Roaming\Python\Python38\site-packages)中安装python第三方包。安装在这个目录中的包能够在base环境中正常使用,但是不能在其他conda环境中使用。并且考虑到应该使同一环境中的包安装在同一个位置,所以不推荐使用该命令。
例如,在test1环境(未安装python和pip包)中依次使用pip install numpy --user命令和pip install matplotlib命令,效果如下。可以发现在base环境中,有matplotlib包,但没有numpy包,matplotlib包安装在D:\miniconda3\Lib\site-packages中,而numpy安装在C:\Users\username\AppData\Roaming\Python\Python38\site-packages中。
在Pycharm中改变项目环境为base环境,并导入这两个包时均无报错,但查看包文件的位置时,却是安装在上述两个不同的目录下的。
pip换源
- 永久换源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- 临时换源:在使用pip的时候在后面加上-i参数,指定pip源。例如,pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
- 国内镜像源:
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云 http://mirrors.aliyun.com/pypi/simple/
其他conda命令
操作 | 命令 |
---|---|
查看环境中已经安装的包 | conda list |
查看所有conda环境 | conda env list 或 conda info -e |
创建指定python版本的conda环境 | conda create -n ENV_NAME python=3.8 |
创建包含某些包的环境 | conda create -n ENV_NAME PACKAGE_NAME |
安装包 | conda install PACKAGE_NAME |
更新包 | conda update requests |
更新所有包 | conda update --all |
更新conda版本 | conda update conda |
查看conda版本 | conda -V |
进入指定环境 | conda activate ENV_NAME |
退出当前环境 | conda deactivate |
删除某环境 | conda remove ENV_NAME --all |
如何切换Pycharm项目使用的conda环境
在上面的步骤中,我们使用命令行创建了test虚拟环境,但此时Pycharm的项目中使用的还是原来的环境,需要我们手动切换。
- 打开File->Settings->Project->Python Interpreter(或者点击右下角的Python 3.8 (pythonProject)->Interpreter Settings),点击Python Interpreter右侧的箭头,选择Show All。
- 点击 + 加号。
- 对于已创建的conda环境,选择Conda Environment->Existing environment。
- 点击Interpreter右侧的三个点,选择虚拟环境中的Python解释器,即找到miniconda3/envs目录下->希望选择的虚拟环境目录中的python.exe,点击OK。
- 依次点击OK,保存设置,等待右下角状态栏中的Updating skeletons进度条完成。看到右下角显示Python 3.8 (test)说明切换完成,此时项目使用的就是test环境了。