境配置)
Anaconda 這個名字做數(shù)據(jù)、做科研、做深度學習的人基本繞不開。但真正讓人頭疼的從來不是裝不上而是裝完之后那一堆連帶問題Navigator 更新完打不開了、conda 和 pip 混著用把環(huán)境搞成一鍋粥、PyCharm 死活找不到解釋器、服務(wù)器上裝完conda命令不生效。我自己前前后后在不同機器上裝過十幾遍 Anaconda從 Windows 筆記本到?jīng)]有圖形界面的 Linux 服務(wù)器踩的坑足夠?qū)懸槐拘宰?。這篇就把 Anaconda Navigator 更新這條線作為切入點把下載、安裝、環(huán)境變量、虛擬環(huán)境、PyTorch 配置、PyCharm 聯(lián)動、報錯排查這一整條鏈路串起來講一遍盡量寫成那種照著做就不會翻車的版本。不管你是剛接觸 Python 環(huán)境管理的新手還是被某個報錯卡了半天想找答案的老手應(yīng)該都能從里面撈到點有用的東西。1. 裝之前先想明白Anaconda 到底替你管了什么很多人對 Anaconda 的理解停留在一個裝好 Python 的安裝包這個認知本身沒錯但太淺了。搞不清楚它內(nèi)部的層級關(guān)系后面遇到問題就只能靠重裝解決而重裝恰恰是最低效的手段。所以這一節(jié)先把結(jié)構(gòu)捋清楚。1.1 三個層級發(fā)行版、conda、Navigator把 Anaconda 拆開看其實是三層東西疊在一起。最底層是Anaconda 發(fā)行版也就是你下載的那個幾百兆的安裝包比如Anaconda3-2024.10-1-Windows-x86_64.exe這種。它一次性地把一個 Python 解釋器、幾百個常用的第三方庫、以及配套的工具鏈塞進你的硬盤。這個安裝包是快照裝上之后里面的 Python 版本就固定了不會自己變。中間層是conda一個包管理器和環(huán)境管理器。它負責裝包、卸包、建虛擬環(huán)境、切換環(huán)境。conda 和 pip 最大的區(qū)別在于conda 管的不只是 Python 包還能管 Python 解釋器本身、C 編譯出來的二進制庫、甚至非 Python 的依賴比如 CUDA 運行時。這就是為什么搞深度學習的同學更傾向于用 conda 裝 PyTorch——它能把顯卡驅(qū)動之外的那一套依賴一起給你配齊。最上層才是Anaconda Navigator一個圖形界面外殼。它把 conda 的命令行操作包裝成點按鈕還內(nèi)置了 Jupyter Notebook、Spyder、VS Code 這些應(yīng)用的啟動入口。Navigator 本身不是一個獨立軟件它依賴 conda 的 Python 環(huán)境運行所以在 base 環(huán)境被搞壞的時候Navigator 往往是第一個受害者。這三層的關(guān)系決定了排查問題的方向界面打不開問題大概率在下面兩層。Navigator 閃退的時候你去重裝 Navigator 通常只能治標真正該查的是 conda 版本和 base 環(huán)境的狀態(tài)。1.2 為什么會有人裝完就后悔Anaconda 有個被吐槽很多年的點體積大。完整版裝完加上緩存占掉三到五個 G 是很正常的。原因在于它預裝了太多你可能一輩子用不到的科學計算庫Anaconda 官方這么做的邏輯是寧可多給也別讓你裝到一半卡住畢竟對一個剛?cè)腴T的人來說編譯某個庫失敗是最勸退的事情。另一個后悔點是PATH 污染。安裝向?qū)Ю镉幸粋€勾選項問你要不要把 Anaconda 加進系統(tǒng) PATH 環(huán)境變量官方默認是不勾的很多人圖方便手動勾了結(jié)果系統(tǒng)里原來裝的 Python、或者某些工具自帶的 Python 就被頂?shù)袅顺霈F(xiàn)我明明裝了 3.10命令行走出來是 3.7這種詭異現(xiàn)象。我個人的做法是Windows 上堅決不勾那個選項日常操作全部走 Anaconda PromptLinux 上則用conda init讓 shell 自動接管因為服務(wù)器上基本不會有別的 Python 干擾反而需要自動化。這兩種策略的差異會在第 3 節(jié)展開。提示如果你已經(jīng)在 Windows 上勾了 PATH也不用慌。可以到系統(tǒng)屬性 - 環(huán)境變量里把 Anaconda 相關(guān)的幾條路徑刪掉然后重新打開命令行驗證python --version是否回到了原來的版本。1.3 什么時候該考慮 Miniconda說句實在話如果你只是偶爾跑個腳本或者服務(wù)器磁盤緊張Miniconda 是更克制的選擇。它只包含 conda 和 Python 本身不預裝任何第三方庫裝完大概幾百兆。后續(xù)需要什么自己conda install就行。代價是沒有 Navigator也沒有預裝的 Jupyter、Spyder。對于習慣圖形界面的新手來說上手門檻會高一點。我的判斷標準很簡單如果你連命令行都不想碰裝完整版 Anaconda如果你已經(jīng)能熟練敲pip install直接上 Miniconda。這篇后面的內(nèi)容兩者都適用只是 Navigator 相關(guān)的部分只針對完整版。2. 安裝包怎么挑版本號與鏡像站實操第一節(jié)講清楚了概念接下來就是動手。下載這一步看著簡單實際上版本挑錯、下載源選錯后面會多出不少麻煩。2.1 版本號里每一位是什么含義Anaconda 的安裝包命名格式是這樣的Anaconda3-2024.10-1-Windows-x86_64.exe拆開看Anaconda3表示這版綁定的是 Python 3.x 系列2024.10是發(fā)行日期代表 2024 年 10 月發(fā)布的快照后面那個-1是同一個月內(nèi)的第幾版修訂通常用來修 bug再往后是平臺和架構(gòu)Windows-x86_64就是 64 位 WindowsLinux 平臺對應(yīng)Linux-x86_64蘋果的 M 系列芯片則是MacOSX-arm64。這里有幾個容易踩的點日期號越大不等于越適合你。新版本帶的是更新的 Python 和更新的庫但一些老項目、特別是依賴 C 擴展的科研庫在新 Python 上可能還沒有預編譯好的 wheel裝的時候會現(xiàn)場編譯慢不說還容易失敗。穩(wěn)妥做法是選一個發(fā)布半年到一年、社區(qū)反饋比較多的版本。-1這種修訂號別忽略。同一日期號的初版有時會有已知 bug官方會補一版修訂。如果看到某個版本有-0和-1兩個優(yōu)先選后者。架構(gòu)千萬別選錯。Windows 上有x86_6464 位和x8632 位之分現(xiàn)在幾乎沒有理由再用 32 位了。蘋果用戶要注意區(qū)分x86_64Intel 芯片和arm64M 系列芯片選錯的話要么裝不上要么靠轉(zhuǎn)譯跑性能差一截。2.2 國內(nèi)下載為什么更推薦走鏡像站官網(wǎng)的下載服務(wù)器在境外直連的速度有時候只有幾十 KB/s一個 700MB 的安裝包能下到你懷疑人生。國內(nèi)高校和云廠商維護的鏡像站是同步官網(wǎng)內(nèi)容的速度可以跑到滿帶寬。清華的 TUNA 鏡像站是國內(nèi)用得最多的一個它的 Anaconda 歸檔目錄路徑大致是https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/打開這個目錄會看到一個按字母和數(shù)字排序的文件列表名字特別長找起來有點費眼睛。有個小技巧這個頁面支持參數(shù)排序和篩選。比如加上查詢參數(shù)可以讓它按修改時間倒序排列最新的安裝包就浮到最上面了省得你去翻頁。類似?CMOD這樣的參數(shù)組合C表示排序字段O表示升降序具體含義各家頁面略有差異你也可以直接用瀏覽器自帶的頁內(nèi)搜索去匹配關(guān)鍵字。除了歸檔目錄鏡像站一般還有miniconda和anaconda/pkgs這兩個重要目錄。前者放的是 Miniconda 的安裝包后者是 conda 的軟件包倉庫——這個 pkgs 目錄就是后面配置.condarc時要填的地址先記住它。國內(nèi)的鏡像選擇不止清華一家其他的高校鏡像和云廠商鏡像內(nèi)容基本一致速度上因地區(qū)和運營商而異。經(jīng)驗之談哪個快就用哪個不用迷信某一家配置的時候也沒必要把所有鏡像都堆上去頻道多了反而容易因為同步不一致導致依賴解析失敗。2.3 校驗一下再裝能省掉一半玄學問題下載完安裝包花十秒鐘核對一下大小和校驗值能擋掉很多裝到一半報錯的情況。鏡像站的文件一般在大文件旁邊會帶一個校驗文件格式大概是# Linux / macOS 下核對 shasum -a 256 Anaconda3-2024.10-1-Linux-x86_64.sh # Windows PowerShell 下核對 Get-FileHash .\Anaconda3-2024.10-1-Windows-x86_64.exe -Algorithm SHA256把輸出結(jié)果和官方給出的值對一下一致就說明文件完整。不一致基本就是下載中斷或者被網(wǎng)絡(luò)中間環(huán)節(jié)改了刪掉重下別硬著頭皮裝。注意別用迅雷之類的多線程下載工具去抓這類安裝包有時候拼接出來的文件會出問題表面看著像下完了裝到后半段才報錯。用瀏覽器原生下載或者curl、wget最穩(wěn)。3. 三個平臺的安裝實操安裝這一步不同平臺的注意事項差別挺大。Windows 是圖形向?qū)Э简灥氖枪催x項判斷Linux 服務(wù)器是命令行安裝考驗的是你有沒有把 shell 初始化做對。3.1 Windows安裝向?qū)Ю锬菐讉€勾到底怎么選雙擊安裝包之后會走一個不算短的向?qū)Я鞒剃P(guān)鍵節(jié)點有這么幾個。安裝類型這一步會讓你選Just Me還是All Users。如果這臺電腦只有你一個人用選Just Me裝到用戶目錄下不需要管理員權(quán)限如果是公司電腦或者多人共用的機器選All Users裝到公共目錄。對絕大多數(shù)人來說前者就夠了。安裝路徑這一步很關(guān)鍵。默認路徑長這樣C:\Users\你的用戶名\anaconda3理論上能用但我不推薦。原因有三一是用戶名里可能有中文或者空格某些老工具處理不了這種路徑二是 C 盤空間緊張的時候很尷尬三是后面配置 IDE 的時候路徑短一點眼睛舒服。我一般改成D:\anaconda3或者D:\dev\anaconda3這種。路徑里絕對不要有中文、空格和特殊符號這是硬性要求不是建議。高級選項這一步有兩個勾是最容易出問題的地方。第一個是Add Anaconda3 to my PATH environment variable。官方在這個選項下面用紅字標注不推薦理由是可能和系統(tǒng)里已有的軟件沖突。這個警告是認真的Windows 上請不要勾。你需要用 conda 的時候從開始菜單打開Anaconda Prompt就行那個窗口會自動把環(huán)境變量配好。第二個是Register Anaconda3 as my default Python。這個勾上問題不大它會幫你把 Anaconda 的 Python 注冊成系統(tǒng)的默認 Python別的軟件調(diào)用 Python 時會找到它。如果你機器上已經(jīng)有別的 Python 環(huán)境并且正在用就別勾如果是新機器勾上省事。裝完之后從開始菜單找到 Anaconda Prompt敲一行conda --version python --version兩條都有正常輸出安裝就算成功了。這一步一定要做別等后面用 Navigator 出問題了才回來確認。3.2 Linux 服務(wù)器靜默安裝與 shell 初始化服務(wù)器上沒有圖形界面Navigator 基本用不上裝 Anaconda 的目的就是拿到 conda 和 Python 環(huán)境。把.sh安裝包傳到服務(wù)器上scp或者wget都行然后# 賦予執(zhí)行權(quán)限 chmod x Anaconda3-2024.10-1-Linux-x86_64.sh # 開始安裝-b 是靜默模式-p 指定安裝路徑 bash Anaconda3-2024.10-1-Linux-x86_64.sh -b -p $HOME/anaconda3-b這個參數(shù)很重要它讓安裝過程不再交互式提問包括那個拉到底才出現(xiàn)的許可協(xié)議確認適合腳本化部署。-p指定安裝位置裝在用戶目錄下不需要 root 權(quán)限也避免了對系統(tǒng)目錄的污染。如果你的服務(wù)器有共享存儲而且多人要用也可以裝到/opt/anaconda3這類公共位置但要處理好權(quán)限。安裝腳本跑完之后最后一屏通常會說需要你關(guān)掉終端重開或者手動 source 一下。這里就是新手最容易卡住的地方——裝完了敲conda提示 command not found。原因是安裝腳本雖然往~/.bashrc里寫了初始化代碼但當前這個 shell 還沒重新加載配置。執(zhí)行source ~/.bashrc或者在 Bash 里直接跑一遍初始化命令$HOME/anaconda3/bin/conda init bash source ~/.bashrcconda init的作用是往 shell 的啟動文件里注入一段腳本讓每次開新終端時自動加載 conda 的函數(shù)定義順便把 base 環(huán)境激活。你的服務(wù)器如果用 Zsh 而不是 Bash把bash換成zsh就行。提示如果conda init之后每次開終端都自動進 base 環(huán)境而你不想這樣可以執(zhí)行conda config --set auto_activate_base false。這個設(shè)置特別適合服務(wù)器場景避免你登錄進去意外在一個不該用的環(huán)境里跑任務(wù)。3.3 環(huán)境變量到底要不要手工配關(guān)于Linux 下要手動設(shè)置 Anaconda 環(huán)境變量這個說法網(wǎng)上流傳很廣但我想把它說清楚正式做法是用conda init不是手改 PATH。手改的做法一般是在~/.bashrc里加這么一行export PATH/home/你的用戶名/anaconda3/bin:$PATH這行確實能讓conda、python這些命令可用但它有個副作用它把 Anaconda 的 bin 目錄直接塞進了 PATH 最前面所有 Python 相關(guān)的命令都會被 Anaconda 覆蓋而且繞過了 conda 的環(huán)境切換機制。你會發(fā)現(xiàn)在這種配置下conda activate的行為可能不太正常。conda init寫進去的是一段 shell 函數(shù)定義邏輯是按需把當前環(huán)境的路徑插到最前面比硬改 PATH 要優(yōu)雅得多。所以正確的順序是先用conda init實在有問題再考慮手改 PATH 作為臨時方案。還有一些同學遇到過環(huán)境變量里混進了奇怪內(nèi)容的 warning比如引號或者變量拼接錯誤導致的warning。這種一般是因為~/.bashrc里被反復追加了多份 conda 初始化代碼或者某一行引號沒配對。排查方法很簡單grep -n conda ~/.bashrc看看文件里是不是有多段重復的初始化塊。有的話留一段、刪掉其余然后source ~/.bashrc重新驗證。4. Navigator 更新與閃退常見毛病一次說透這一節(jié)是本篇的重點。Navigator 用久了會出現(xiàn)兩類問題一是提示有更新更完就出問題二是直接閃退或者卡在啟動界面。這兩件事的根因其實高度相關(guān)。4.1 更新的正確順序別一上來就點按鈕Navigator 的圖形界面里有個更新按鈕點下去它會更新自己。這個操作的坑在于Navigator 是被 conda 管理的包它自己更新自己的時候依賴關(guān)系可能被攪亂。更穩(wěn)的做法是關(guān)掉 Navigator打開 Anaconda PromptWindows或者終端Linux/macOS按順序執(zhí)行# 第一步先更新 conda 本體它是地基 conda update -n base conda # 第二步更新 Navigator conda update -n base anaconda-navigator # 第三步如果還想把 base 里其他包一起升用這條 conda update --all這里第三步要謹慎。conda update --all會把 base 環(huán)境里所有包升到最新聽起來很爽但它破壞了依賴解析的穩(wěn)定性——某些包之間有版本約束全升可能導致沖突。我的習慣是base 環(huán)境盡量保持干凈只裝 conda、navigator 這一類工具所有業(yè)務(wù)依賴都放到獨立虛擬環(huán)境里。這樣 base 出問題的概率低很多真要全升也不心疼。如果你確實想要一個確定的 Navigator 版本可以用帶版本號的安裝方式conda install -n base anaconda-navigator2.6.0版本號以你實際環(huán)境的可用版本為準先用conda search anaconda-navigator看看有哪些可選。4.2 閃退與卡在 loading applications 的排查路徑Navigator 啟動時做的事情大致是加載配置、讀取環(huán)境列表、聯(lián)網(wǎng)拉取可安裝應(yīng)用的元信息、渲染界面。這幾個環(huán)節(jié)任一失敗都可能表現(xiàn)為閃退或者界面卡住。癥狀一點了圖標沒有任何反應(yīng)或者窗口一閃就沒了。這種情況下圖形界面什么都不告訴你得去命令行里啟動才能看到報錯信息# Windows 在 Anaconda Prompt 里執(zhí)行 anaconda-navigator # 或者 python -m anaconda_navigator命令行里會打印出真實的異常棧。常見的幾類原因和對應(yīng)處理現(xiàn)象可能原因處理方式導入某個 Qt 相關(guān)模塊失敗PyQt / qt 包版本錯亂conda install -n base pyqt5重裝界面庫提示 conda 版本過舊或 API 不匹配Navigator 和 conda 版本脫節(jié)先升 conda再升 navigator卡在加載配置配置文件損壞清理緩存目錄后重啟網(wǎng)絡(luò)超時拉取應(yīng)用元信息失敗配置國內(nèi)頻道鏡像癥狀二界面卡在 loading applications。這是最經(jīng)典的一個。它在做的事是聯(lián)網(wǎng)獲取應(yīng)用列表網(wǎng)絡(luò)不通或者超時就一直轉(zhuǎn)圈。解決辦法是給 conda 換成國內(nèi)鏡像源。在用戶目錄下新建或編輯.condarc文件Windows 在C:\Users\你的用戶名\.condarcLinux/macOS 在~/.condarc內(nèi)容大致是channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud寫完之后執(zhí)行conda clean -i清掉索引緩存然后重新打開 Navigator。癥狀三配置文件或緩存壞了。Navigator 會在用戶目錄下存一份自己的配置和緩存路徑是~/.anaconda/navigatorWindows 對應(yīng)%USERPROFILE%\.anaconda\navigator。這個目錄壞掉的表現(xiàn)很隨機有時候是界面白屏有時候是按鈕點不動。處理方式是把整個目錄改名做個備份讓它重新生成# Linux / macOS mv ~/.anaconda/navigator ~/.anaconda/navigator.bak anaconda-navigator --resetWindows 下把.anaconda\navigator文件夾重命名然后在 Anaconda Prompt 里執(zhí)行anaconda-navigator --reset。4.3 說到底Navigator 還值不值得用講真等你熟悉了命令行之后Navigator 的價值會迅速下降。它最大的好處是給新手一個可視化的環(huán)境管理入口能直觀看到有哪些環(huán)境、每個環(huán)境裝了哪些包。但它的啟動速度、穩(wěn)定性都不如直接敲命令而且在沒有圖形界面的服務(wù)器上根本用不了。我現(xiàn)在的習慣是本地機器上保留 Navigator偶爾用來看一眼環(huán)境列表所有實際操作用命令行完成。這樣既能享受圖形化的便利又不會被它的穩(wěn)定性問題綁架。對剛?cè)腴T的同學我的建議是先熟悉幾個核心命令——conda create、conda activate、conda install、conda env list、conda remove——這五個用熟了Navigator 出不出問題都不影響你干活。5. 虛擬環(huán)境與 PyTorch 環(huán)境配置環(huán)境管理是 Anaconda 真正發(fā)揮作用的地方也是新手最容易搞混的部分。這一節(jié)從建環(huán)境講到裝 PyTorch。5.1 建環(huán)境時那幾個參數(shù)怎么定一個標準的建環(huán)境命令長這樣conda create -n pytorch-env python3.10逐個參數(shù)拆解-n pytorch-env是給環(huán)境起名字。名字建議用有意義的英文短名別用env1、test2這種過兩個月你自己都想不起來是干嘛的。不要用中文和空格某些工具鏈處理不了。python3.10指定 Python 版本。這個參數(shù)建議永遠帶上不指定的話 conda 會給你裝一個新版本而這個新版本可能和你要用的深度學習框架還不兼容。深度學習這塊Python 版本跟著框架的官方支持走穩(wěn)妥區(qū)間一般是 3.9 到 3.11。如果需要指定環(huán)境的存放位置比如放到數(shù)據(jù)盤可以用-p /path/to/env代替-n 名字但說實話用名字管理更省心。建好之后激活conda activate pytorch-env你會看到命令提示符前面的括號從(base)變成了(pytorch-env)。退出用conda deactivate。查看所有環(huán)境用conda env list刪環(huán)境用conda remove -n pytorch-env --all。注意刪環(huán)境這個命令的--all參數(shù)不能省否則 conda 只會刪掉環(huán)境里的某個包而不是整個環(huán)境。這個坑我見過太多人踩。5.2 conda 源和 pip 源要分開配這是個高頻誤區(qū)很多人以為配了一個鏡像源就萬事大吉了結(jié)果conda install走的是鏡像pip install還是直連境外慢得讓人崩潰。原因是conda 和 pip 用的是兩套完全獨立的配置體系。conda 的源寫在第 4 節(jié)提到的.condarc里。pip 的源要用它自己的命令配置pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn第一條設(shè)置默認索引地址第二條把域名加入信任列表某些環(huán)境下不加這兩條會有 SSL 相關(guān)告警。配置完可以用pip config list確認。也可以臨時指定不寫進配置pip install 某個包 -i https://pypi.tuna.tsinghua.edu.cn/simple這里有個經(jīng)驗在同一個環(huán)境里盡量不要 conda 和 pip 混著裝同一個包的依賴鏈。比如用 conda 裝了 numpy又用 pip 裝了一個依賴 numpy 的包pip 可能會把 conda 裝的那份 numpy 覆蓋成 PyPI 上的版本兩份包的元數(shù)據(jù)記錄不一致后面conda list顯示的版本和實際導入的版本對不上排查起來非常痛苦。我的原則是能用 conda 裝就用 conda 裝conda 里實在沒有的特別是一些小眾的、純 Python 的包再用 pip。裝之前先用conda search 包名確認一下有沒有。5.3 PyTorch 安裝與驗證PyTorch 的安裝命令不是固定的它跟你的顯卡、CUDA 版本強相關(guān)必須去官網(wǎng)的安裝選擇器生成不能隨便復制別人博客上的命令。大體形式有這么幾種# 走 conda 裝帶 CUDA 支持的版本 conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia # 走 pip 裝用官方指定的索引 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 純 CPU 版本體積小適合沒有獨顯的機器 conda install pytorch torchvision torchaudio cpuonly -c pytorch裝完之后一定要驗證別裝完就開始跑代碼python -c import torch; print(torch.__version__); print(torch.cuda.is_available())輸出應(yīng)該先打印版本號再打印True或False。如果第二行是False而你機器上確實有 NVIDIA 顯卡那說明裝的是 CPU 版本或者 CUDA 版本和驅(qū)動不匹配。這時候別急著卸載重裝先把版本對齊關(guān)系理一遍檢查項命令說明驅(qū)動支持的最高 CUDAnvidia-smi右上角顯示的 CUDA Version 是驅(qū)動上限框架編譯時的 CUDApython -c import torch; print(torch.version.cuda)必須小于等于驅(qū)動上限顯卡是否可見nvidia-smi列表里能看到顯卡型號常見錯誤是把驅(qū)動上限和框架版本搞反了。比如驅(qū)動只支持到 CUDA 11.8你裝了一個編譯在 CUDA 12.x 上的 PyTorchcuda.is_available()就是False。正確做法是裝一個低于驅(qū)動上限的版本而不是去升級驅(qū)動服務(wù)器上驅(qū)動往往不是你說了算。6. PyCharm 聯(lián)動 Anaconda環(huán)境配好了怎么讓 PyCharm 用上它是另一個高頻問題。這一步出錯的表現(xiàn)通常是PyCharm 里 import 報紅但命令行里明明能跑。6.1 解釋器到底該指向哪個文件PyCharm 配置解釋器的路徑是File - Settings - Project - Python Interpreter點齒輪圖標選Add然后選Conda Environment再選Existing environment最后在輸入框里指向你的環(huán)境路徑。這個路徑在不同系統(tǒng)下不一樣# Windows D:\anaconda3\envs\pytorch-env\python.exe # Linux / macOS /home/用戶名/anaconda3/envs/pytorch-env/bin/python注意要指向的是envs/環(huán)境名/下面的 Python不是 Anaconda 根目錄下的 Python。指向根目錄的 Python 就等于在用 base 環(huán)境你裝的 PyTorch 在另一個環(huán)境里自然 import 不到。如果下拉框里干脆沒有你建的環(huán)境通常是 PyCharm 沒找到 conda 的可執(zhí)行文件。這時候要手動指定 conda 的位置# Windows 通常是 D:\anaconda3\condabin\conda.bat # Linux / macOS 通常是 /home/用戶名/anaconda3/bin/conda注意 Windows 上指向的是condabin目錄下的conda.bat不是Scripts目錄下的conda.exe。這個細節(jié)坑過不少人。6.2 三個高頻坑和對應(yīng)處理坑一PyCharm 內(nèi)置終端不激活環(huán)境。PyCharm 底部的 Terminal 默認可能走的是系統(tǒng) shell里面敲conda activate提示命令不存在。解決辦法是在 Settings 里搜 Terminal把 Shell path 改成對應(yīng)的 shell或者在 Settings 的 Tools - Terminal 里勾上激活虛擬環(huán)境的選項。更省事的辦法是直接用系統(tǒng)終端別在 IDE 里糾結(jié)??佣牧谁h(huán)境但運行配置沒跟著變。PyCharm 的 Run Configuration 里有一項 Python interpreter有時候它鎖定的是舊環(huán)境。改了項目解釋器之后記得去 Run - Edit Configurations 里確認一下運行配置用的是哪個解釋器??尤窂嚼镉兄形膶е?pip 裝包失敗。這個屬于老生常談但每年都有人中招。環(huán)境和項目路徑里有中文時一些包在編譯階段會因為編碼問題直接失敗報錯信息還特別隱晦。從建環(huán)境那天起就把路徑規(guī)范好比事后救火輕松得多。7. 報錯速查與徹底卸載最后一節(jié)整理兩類內(nèi)容一是常見報錯的對照排查二是當你想徹底重來時的干凈卸載流程。7.1 一份可以對著查的報錯表報錯信息片段大概率原因處理方向cannot import name xxx from yyy包的版本升級后 API 變了查該包的版本變更記錄調(diào)整導入方式或降版本ModuleNotFoundError: No module named xxx包沒裝或裝到了別的環(huán)境conda list確認檢查當前激活的是哪個環(huán)境ImportError: DLL load failed二進制依賴缺失或被覆蓋重裝相關(guān)包別混用 conda 和 pipconda: command not foundshell 未初始化執(zhí)行conda init后 source 配置文件PackagesNotFoundError頻道里沒這個包換頻道或改用 pipSolving environment: failed依賴沖突新建一個干凈環(huán)境重裝別在舊環(huán)境里硬解這里拿第一條舉個例子因為這類報錯最容易被誤判成環(huán)境壞了重裝吧。有位同學跑地球物理正演腳本時遇到這樣的報錯ImportError: cannot import name mesh from simpeg他第一反應(yīng)是環(huán)境裝錯了準備刪掉重來。實際上這不是環(huán)境問題而是SimPEG 這個庫在新版本里做了模塊拆分網(wǎng)格相關(guān)的部分被移到了discretize這個獨立包里原來從simpeg頂層導入mesh的寫法自然就失效了。正確的排查順序應(yīng)該是這樣先確認當前裝的版本conda list simpeg或pip show simpeg。去查這個版本的變更說明看mesh這個子模塊去哪了。按照新版本的用法改導入語句比如改成從新的包導入或者用新的類名。如果短期內(nèi)不想改代碼可以考慮退回到 API 沒變的舊版本pip install simpeg舊版本號。這個例子的普適價值在于看到 ImportError先懷疑版本和 API再懷疑環(huán)境。重裝一個環(huán)境要花十幾分鐘查一次版本記錄可能只要兩分鐘。7.2 想徹底重來的時候卸載要刪干凈哪幾樣Anaconda 的卸載比安裝更需要耐心殘留的配置文件和緩存會在你重裝后繼續(xù)生效導致新裝的還是同樣的問題。Windows 上的順序是這樣。先用官方提供的清理工具清掉配置文件conda install anaconda-clean anaconda-clean --yes這個工具會把散落在用戶目錄下的 conda 相關(guān)配置文件挪到備份目錄。然后從控制面板 - 程序和功能里卸載 Anaconda最后手工檢查幾個目錄是否還殘留D:\anaconda3 # 主安裝目錄 C:\Users\你的用戶名\.conda # 環(huán)境配置 C:\Users\你的用戶名\.condarc # 頻道配置 C:\Users\你的用戶名\.anaconda # Navigator 配置緩存Linux 上多一步把~/.bashrc里conda init注入的那一段代碼刪掉也就是以# conda initialize 開頭、# conda initialize 結(jié)尾的那一整個塊。刪完之后重開終端conda命令應(yīng)該就不存在了。環(huán)境變量里如果還有手工加過的 Anaconda 路徑一并清理。我自己現(xiàn)在的做法是不用官方卸載器直接手動刪目錄加清配置反而更快也更干凈。前提是你確認沒有別的軟件依賴這套 Python。7.3 一點個人心得折騰環(huán)境這么多年我最后悔的事情之一是沒有在第一次裝完 Anaconda 之后就把.condarc和 pip 源配好。那會兒每次裝包都在等下載慢得心態(tài)崩。后來把鏡像配齊之后裝一個深度學習環(huán)境從半小時降到五分鐘。另一個體會是環(huán)境要小而專。我現(xiàn)在一臺機器上會有七八個環(huán)境每個環(huán)境只服務(wù)一個項目互不干擾??粗伎臻g但出問題的時候直接刪掉重建就行不會有刪了它別的項目就跑不起來的顧慮。base 環(huán)境則當成一個只放管理工具的空殼盡量不往里裝業(yè)務(wù)包。這套習慣養(yǎng)成之后我?guī)缀踉贈]有遇到過環(huán)境徹底崩了要重裝 Anaconda的情況。