序言
對於想要入門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環境了。

