境管理與依賴隔離實(shí)戰(zhàn)指南)
搞Python開發(fā)環(huán)境管理是一道繞不過去的坎。我見過太多人因?yàn)榘岩蕾囇b進(jìn)系統(tǒng)環(huán)境導(dǎo)致某個包升級后整個項(xiàng)目跑不起來最后只能重裝系統(tǒng)。Pip能解決的包依賴問題在純Python項(xiàng)目里夠用但一旦涉及Python版本切換、原生庫編譯、CUDA版本協(xié)同就力不從心了。這也是為什么我一直推薦只要你認(rèn)真地跟Python打交道第一件事就是把conda裝上——準(zhǔn)確地說是裝上它的輕量發(fā)行版Miniconda。Miniconda體積小只帶一個Python解釋器、conda本身和少量基礎(chǔ)包但環(huán)境隔離、跨語言依賴解析這些核心能力它一個不缺。日常開發(fā)、數(shù)據(jù)分析、模型實(shí)驗(yàn)用Miniconda完全足夠而不用像Anaconda那樣背著一堆大概率用不上的預(yù)裝包。這篇內(nèi)容適合剛接觸Python的新人也適合已經(jīng)在用但沒理順環(huán)境管理的開發(fā)者。我會完整走一遍Miniconda的下載、安裝、初始化和常用操作把每個命令背后的邏輯講清楚順便整理這幾年我踩過的坑和排查方法。1. 為什么環(huán)境管理繞不開conda1.1 你被“版本地獄”折磨過幾次Python最讓人抓狂的問題不是語法而是依賴。張三給你一個項(xiàng)目代碼requirements.txt里寫著pandas1.5你裝好之后發(fā)現(xiàn)李四的另一個項(xiàng)目要求pandas1.3兩個項(xiàng)目放同一個環(huán)境里必然有一個跑不了。更麻煩的是Python解釋器本身。你的系統(tǒng)可能預(yù)裝了Python 3.8某些老項(xiàng)目需要2.7或3.6另一些新項(xiàng)目又想用3.11的新特性。用系統(tǒng)級Python去切換版本是噩夢。大家常用的venv虛擬環(huán)境能解決一部分問題。它可以把不同項(xiàng)目的Python包隔離開讓pandas裝到各自的虛擬環(huán)境里互不干擾。但venv有個硬傷它是基于系統(tǒng)里原有的那個Python解釋器創(chuàng)建的。系統(tǒng)是3.8你虛擬里也只能是3.8。想讓某個項(xiàng)目精確用3.11你得先想辦法把3.11裝到系統(tǒng)里然后再建環(huán)境。跨平臺場景下這個流程容易出錯。某次我在一個新服務(wù)器上配置環(huán)境系統(tǒng)Python是2.7venv幾乎直接不可用很多包裝不上。從那個項(xiàng)目之后我就徹底切到了conda路線。打個比方系統(tǒng)Python是一間大廚房所有菜都在一個灶臺上做venv只是把食材分到不同的保鮮盒里鍋還是同一口鍋。conda則干脆給你一整套獨(dú)立的灶臺、鍋碗和燃?xì)?。每個項(xiàng)目一套完整廚房互不干擾這才是干凈的隔離方式。1.2 Miniconda和Anaconda到底選誰網(wǎng)上搜索Python環(huán)境管理大量教程推薦Anaconda。Anaconda是個全家桶預(yù)裝了科學(xué)計(jì)算、數(shù)據(jù)分析領(lǐng)域常用的幾百個包數(shù)據(jù)科學(xué)家裝完直接用體驗(yàn)確實(shí)順滑。但代價是安裝包動輒數(shù)GB整個目錄非常占空間而且預(yù)裝的包版本往往滯后于社區(qū)最新穩(wěn)定版有時候反而成為負(fù)擔(dān)。我個人的選擇始終是Miniconda。Miniconda只有幾十MB只包含conda、一個默認(rèn)Python解釋器和最少的依賴。你缺什么包就裝什么環(huán)境干凈、可控、占空間小。安裝Anaconda之后再想把它卸載干凈比較費(fèi)勁而Miniconda刪掉目錄就基本干凈了重新裝也快。這里放一個直觀對比對比項(xiàng)MinicondaAnaconda安裝包體積約80MB左右約600MB以上預(yù)裝包數(shù)量極少僅基礎(chǔ)數(shù)百個環(huán)境管理能力完整完整是否自帶IDE相關(guān)組件否帶notebook等適合場景絕大多數(shù)學(xué)開發(fā)、部署、AI實(shí)驗(yàn)純數(shù)據(jù)分析、希望零配置開箱即用如果你還沒開始直接選Miniconda。已經(jīng)裝了Anaconda的也別急著刪后面創(chuàng)建新項(xiàng)目時順手用它就行但新機(jī)器上我永遠(yuǎn)都是Miniconda。1.3 conda依賴解析為什么比pip更硬核你可能會問既然pip都能裝包c(diǎn)onda不就是多了一個環(huán)境隔離嗎其實(shí)不止。pip只處理Python包之間的依賴關(guān)系它不會去管理Python解釋器本身的版本。而conda把解釋器、編譯好的原生庫、甚至CUDA相關(guān)的底層二進(jìn)制都納入同一個依賴體系統(tǒng)一解析、統(tǒng)一安裝。舉個具體例子你需要裝GPU版深度學(xué)習(xí)框架它依賴特定版本的CUDA庫和cuDNN。用pip裝往往只保證Python層滿足系統(tǒng)層面的CUDA要你自己配用conda安裝依賴滿足、版本匹配、路徑設(shè)置都一起處理好了。這也是很多人在Linux上跑深度學(xué)習(xí)的首選方案。conda的解析器會遍歷整個依賴樹檢查每個包的相互約束盡量找到一組不沖突的版本。代價是搜索過程比pip慢尤其是首次安裝包時但那一步等待的穩(wěn)定性換來了后期少掉很多頭發(fā)。對追求簡潔和可控的我來說這筆時間花得值。2. Miniconda安裝部署實(shí)操2.1 裝之前先確認(rèn)系統(tǒng)和架構(gòu)安裝包千萬別隨手下一個。先看清楚機(jī)器架構(gòu)。Linux環(huán)境下服務(wù)器通常是x86_64但有些ARM服務(wù)器是aarch64macOS還要區(qū)分是Intel芯片還是Apple Silicon兩者安裝包都不同。確認(rèn)方法很簡單Linux運(yùn)行uname -m輸出x86_64或aarch64。macOS點(diǎn)擊左上角蘋果圖標(biāo)查看“關(guān)于本機(jī)”。Intel顯示“Intel”M系列芯片會寫明芯片型號。Windows一般直接下載64位安裝包即可絕大多數(shù)機(jī)器都是x86_64。架構(gòu)選錯最典型的癥狀是安裝完CD到目錄執(zhí)行./conda報(bào)文件格式錯誤或者bash腳本執(zhí)行后提示某個二進(jìn)制無法運(yùn)行。其實(shí)不是因?yàn)榫W(wǎng)絡(luò)或配置純粹是包選錯了?;ㄒ环昼姶_認(rèn)架構(gòu)能省很多時間。2.2 Linux部署全過程Linux下安裝是命令行的活流程非常固定。以Linux x86_64為例先下載Miniconda安裝腳本版本號建議使用當(dāng)前最新版但下面的命令邏輯是通用的wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh執(zhí)行第二行之后腳本會先顯示許可證按空格翻到最末尾輸入yes同意許可。接著會出現(xiàn)安裝路徑提示直接回車用默認(rèn)的~/miniconda3就行。我不建議改到其他位置因?yàn)槟J(rèn)路徑對后續(xù)的conda init和PATH配置最省事。最后腳本會問你是否要運(yùn)行conda init來把conda代碼寫入shell配置這一步務(wù)必輸入yes否則安裝完后在終端里根本找不到conda命令。然后讓配置生效source ~/.bashrc conda -V看到版本號輸出基本就裝好了。如果用的是zshinit時寫入的是.zshrc對應(yīng)改成source ~/.zshrc。這一步做完系統(tǒng)里Python的優(yōu)先級也會發(fā)生變化可以用which python驗(yàn)證一下大概率指向了miniconda3的base環(huán)境這是正常的。2.3 Windows和macOS的安裝差異Windows安裝很簡單下載.exe安裝包雙擊運(yùn)行選中“Install for: Just me”保持默認(rèn)勾選點(diǎn)擊Next。有一頁會讓你勾選“Add Miniconda3 to my PATH environment variable”和“Register Miniconda3 as my default Python”我的建議是勾選第一個不推薦勾第二個因?yàn)榘袽iniconda設(shè)為系統(tǒng)默認(rèn)Python之后有些Windows自帶的Python相關(guān)軟件會出現(xiàn)不明問題。裝完開始菜單里會多出“Anaconda Prompt”這個入口所有conda命令建議在這個終端里執(zhí)行而不是在系統(tǒng)自帶的CMD或PowerShell里亂跑。這是很多Windows新手容易踩坑的地方。macOS的流程和Linux同理唯一要注意的是安裝包選擇Intel芯片選x86_64Apple Silicon選arm64。裝好之后同樣需要執(zhí)行conda init一般默認(rèn)寫入.zshrc然后source ~/.zshrc重啟shell。2.4 安裝后馬上做的兩個配置第一件事是確認(rèn)conda init是否生效。如果terminal里輸入conda沒反應(yīng)大概率是shell沒重載或者init沒跑。重新執(zhí)行一次conda init bash source ~/.bashrc第二件事是配置鏡像源。這一步在國內(nèi)環(huán)境尤其重要。conda默認(rèn)從官方源下載包速度不穩(wěn)定某些網(wǎng)絡(luò)環(huán)境下頻繁超時。配置鏡像源只需要寫一個~/.condarc文件。參考配置如下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 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud配置好之后跑一下conda clean -i清理索引緩存再conda update --all看能不能正常更新。能正常更新說明源和網(wǎng)絡(luò)都通了。很多博主會把這一步放到最后但我的經(jīng)驗(yàn)是一裝完就配后面所有操作都順暢不然第一次conda install卡住會讓你誤以為軟件有問題。3. conda核心使用與項(xiàng)目管理實(shí)踐3.1 環(huán)境管理命令創(chuàng)建、激活、刪除環(huán)境管理是conda的核心價值所有命令都很好記習(xí)慣之后基本不會搞混。創(chuàng)建環(huán)境conda create -n myproject python3.11-n是指定環(huán)境名字叫myproject。后面接python3.11conda會自動拉取對應(yīng)版本的Python解釋器裝到這個環(huán)境里這一步是venv做不到的。如果你不想裝解釋器只建一個空環(huán)境也可以省略后面的python參數(shù)但絕大多數(shù)情況下你至少需要一個Python。激活環(huán)境conda activate myproject激活后終端前面會出現(xiàn)類似(myproject)的前綴命令行中python的指向就變成了這個環(huán)境的解釋器??梢杂脀hich python確認(rèn)路徑。退出環(huán)境命令是conda deactivate回到base環(huán)境。查看當(dāng)前有幾個環(huán)境用conda env list。刪除環(huán)境conda remove -n myproject --all加上--all才會連環(huán)境目錄一起刪干凈否則只是刪幾個包。還有一個實(shí)用功能是克隆conda create -n myproject_backup --clone myproject兩個項(xiàng)目依賴相似或者要給現(xiàn)有環(huán)境做快照時克隆比重新建環(huán)境再裝包靠譜得多。3.2 包管理命令安裝、升級、卸載激活環(huán)境后安裝包的命令統(tǒng)一是conda install package_name指定版本號conda install numpy1.24.3可以一次裝多個包c(diǎn)onda install pandas matplotlib scikit-learn更新某個包和更新環(huán)境內(nèi)全部包c(diǎn)onda update package_name conda update --all卸載包c(diǎn)onda remove package_name搜索某個包是否存在于當(dāng)前channelconda search package_name查看當(dāng)前環(huán)境已經(jīng)安裝的包c(diǎn)onda list這里有個細(xì)節(jié)conda install命令默認(rèn)安裝的是當(dāng)前激活環(huán)境。如果沒激活任何環(huán)境它會裝進(jìn)base環(huán)境里這是很多人操作失誤的根源。所以我的習(xí)慣是裝包之前先看一眼終端前綴確認(rèn)自己在哪個環(huán)境再動手。用了一段時間后~/miniconda3/pkgs目錄里會積累大量下載過的安裝包緩存非常占磁盤。定期清理conda clean --all會刪除所有緩存包并清空索引。如果你網(wǎng)絡(luò)穩(wěn)定這個操作可以放心做不影響已安裝環(huán)境只影響之后的下載速度。3.3 實(shí)戰(zhàn)從零搭建一個數(shù)據(jù)分析項(xiàng)目環(huán)境把命令串起來走一遍完整場景你就能理解為什么這套流程能讓你從依賴地獄中解脫出來。假設(shè)同事給了你一份數(shù)據(jù)分析任務(wù)。項(xiàng)目需要Python 3.9、numpy、pandas、matplotlib、jupyter、scikit-learn。你不用管系統(tǒng)里現(xiàn)在是什么Python版本直接這樣操作conda create -n analyst python3.9 -y conda activate analyst conda install numpy pandas matplotlib jupyter scikit-learn -y-y參數(shù)跳過確認(rèn)直接安裝。首次安裝conda會去解析依賴這個過程可能持續(xù)幾分鐘尤其是在沒配鏡像源的時候典型的正?,F(xiàn)象。裝完后啟動jupyterjupyter notebook瀏覽器正常打開環(huán)境里面所有包都齊了。過了半年又接手一個深度學(xué)習(xí)項(xiàng)目需要Python 3.11和PyTorch那你可以完全并行地建另一個環(huán)境conda create -n dl python3.11 -y conda activate dl conda install pytorch numpy -y兩個項(xiàng)目兩個環(huán)境互不影響。analyst環(huán)境里的pandas還是1.5的版本dl環(huán)境里是更新的版本兩邊各自運(yùn)行。這就是conda帶來的最大價值同時跑著幾套完全不同的Python生態(tài)相安無事。3.4 channel到底是個什么概念初次接觸conda聽到channel這個詞會有點(diǎn)迷惑。channel就是下載軟件的來源倉庫相當(dāng)于Linux的apt源。默認(rèn)情況下conda從repo.anaconda.com拉取內(nèi)置了幾個channel其中main是官方主倉庫。社區(qū)維護(hù)的conda-forge是最常用的第三方channel覆蓋了大量默認(rèn)倉庫里沒有的包。添加conda-forgeconda config --add channels conda-forge查看當(dāng)前channel配置conda config --show channelschannel優(yōu)先級由添加順序決定后添加的排在最前面搜索時優(yōu)先使用。日常使用中如果你發(fā)現(xiàn)某個包在默認(rèn)源里搜不到或版本太舊添加conda-forge基本都能解決。但是要小心混用多個channel時conda解析依賴的復(fù)雜度會上升卡住的情況也會增加。我的解決辦法是個人項(xiàng)目幾乎只用conda-forge一個額外channel不用到什么包就到哪個channel里碰運(yùn)氣否則環(huán)境容易裝亂。理解channel對排查問題也特別有用。命令報(bào)404或者找不到包多半是channel里確實(shí)沒有這個版本或者鏡像源沒同步完整而不是你的命令寫錯了。4. 環(huán)境遷移與團(tuán)隊(duì)協(xié)作的硬核技巧4.1 用environment.yml一鍵復(fù)現(xiàn)環(huán)境單人單機(jī)用conda環(huán)境已經(jīng)夠了但一旦涉及多臺機(jī)器、團(tuán)隊(duì)協(xié)作、項(xiàng)目交付環(huán)境復(fù)現(xiàn)就特別重要。conda提供了環(huán)境導(dǎo)出/導(dǎo)入機(jī)制。導(dǎo)出當(dāng)前環(huán)境到文件conda env export -n analyst environment.yml這個文件里會記錄環(huán)境內(nèi)所有包包括版本號和channel來源。其他人拿到這個文件在自己機(jī)器上執(zhí)行conda env create -f environment.yml瞬間擁有和你的環(huán)境幾乎一致的全部依賴。這就是干活的標(biāo)準(zhǔn)姿勢比收到一個requirements.txt之后手動pip install然后再踩坑要省事得多。還有個細(xì)節(jié)是conda env export導(dǎo)出的是精確版本號。如果你的場景是長期維護(hù)更推薦導(dǎo)出到項(xiàng)目依賴的頂層描述而不是完整快照因?yàn)橥暾煺諘阉袀鬟f依賴鎖死跨Python版本遷移時更容易失敗。我通常是在環(huán)境剛建好、包剛裝好的階段做一次conda env export environment.yml當(dāng)項(xiàng)目交付基線腦子清楚后面改動多了再重新導(dǎo)出覆蓋。4.2 環(huán)境克隆與離線遷移多臺服務(wù)器之間直接傳環(huán)境目錄是不可靠的因?yàn)閏onda環(huán)境里有些路徑是寫死的??鐧C(jī)器遷移我嘗試過的幾種方式里有兩種最穩(wěn)定。一個是完全在本機(jī)克隆conda create -n backup_env --clone analyst另一個是離線傳播適合內(nèi)網(wǎng)機(jī)器不能聯(lián)網(wǎng)的場景。在一臺聯(lián)網(wǎng)機(jī)器上把包緩存打包拷貝到目標(biāo)機(jī)器后離線安裝。實(shí)際操作的時候用conda官方提供的conda pack工具把環(huán)境打成壓縮包拷到目標(biāo)機(jī)器上解壓配置好PATH就可以直接用。這個工具需要先用conda安裝conda install conda-pack conda pack -n analyst -o analyst_env.tar.gz目標(biāo)機(jī)器解壓后激活腳本在解壓目錄的bin/activate里mkdir -p ~/my_envs/analyst tar -xzf analyst_env.tar.gz -C ~/my_envs/analyst source ~/my_envs/analyst/bin/activate如果只是偶爾遷移一次conda-pack完全夠用。如果頻繁做多節(jié)點(diǎn)同步更推薦在服務(wù)器上用environment.yml加上共享緩存目錄的思路來減少重復(fù)下載的時間和流量。組織內(nèi)部還可以配置私有channel來統(tǒng)一分發(fā)包但這屬于進(jìn)階需求日常開發(fā)用不到。4.3 conda和pip混用的正確姿勢這個問題幾乎每個新手都會遇到某個包用conda install裝不上或者conda源里版本太舊但pip能輕松搞定。我的原則是首先要考慮conda源是否涵蓋這個包。conda-forge的覆蓋面已經(jīng)很廣絕大多數(shù)Python包都能找到。只有當(dāng)conda里確實(shí)搜不到或者版本嚴(yán)重不符合要求時才落到pip?;煊米畲蟮目釉谟诃h(huán)境隔離。在conda環(huán)境里執(zhí)行pip install時pip默認(rèn)把包裝到當(dāng)前Python解釋器對應(yīng)的site-packages目錄因此從環(huán)境隔離角度看它是能感知conda環(huán)境的。但pip不會記錄依賴到conda的狀態(tài)后續(xù)conda env export導(dǎo)出environment.yml時pip安裝的包默認(rèn)不會包含在里面除非你手動在文件里加pip字段。給一個負(fù)責(zé)任的做法激活目標(biāo)環(huán)境再用python -m pip install而不是直接裸敲pip install因?yàn)檫@能確保pip指向的是當(dāng)前環(huán)境的Python解釋器。如果環(huán)境里已經(jīng)有了一堆pip裝的包導(dǎo)出環(huán)境時用conda env export -n analyst environment.yml --from-history這個命令導(dǎo)出的是你親手敲過的歷史命令而不是所有傳遞依賴的完整快照更適合做項(xiàng)目級的依賴清單也更干凈。5. 常見問題與排查技巧實(shí)錄5.1 安裝完了conda命令卻找不到這是遇到頻率最高的問題。癥狀是終端里輸入conda提示command not found。排查路徑按順序走確認(rèn)安裝腳本執(zhí)行時是否同意初始化shell。如果當(dāng)時選了no重新執(zhí)行conda init bash然后重開終端。檢查shell配置文件。普通安裝路徑寫入了~/.bashrc用grep conda ~/.bashrc能直接看到。沒有就手動執(zhí)行echo export PATH$HOME/miniconda3/bin:$PATH ~/.bashrc。檢查PATH順序。有時候conda裝好了但which conda顯示的路徑不對可能是因?yàn)橹暗哪硞€配置把你的PATH覆蓋掉了。絕大部分情況是前兩條導(dǎo)致的重開終端一次就能解決。5.2 activate環(huán)境了python版本卻沒變在conda環(huán)境里先執(zhí)行conda activate testenv然后你跑python -V發(fā)現(xiàn)版本還是系統(tǒng)原版。這說明shell里python命令指向的仍然是系統(tǒng)路徑conda環(huán)境的優(yōu)先級沒有生效。檢查echo $PATH看conda環(huán)境目錄是否出現(xiàn)在最前面。如果在Windows的CMD里這樣操作大概率是因?yàn)槟愕腃MD沒有被conda初始化。Windows下始終建議用開始菜單的Anaconda Prompt。如果你在系統(tǒng)PATH里寫死了某個Python目錄它也會壓過conda的優(yōu)先級。這一點(diǎn)比較隱蔽排查時間會多一些。另外一個冷門原因在同一目錄下有個虛擬環(huán)境的python可執(zhí)行文件或者項(xiàng)目的venv/bin被激活了PATH順序會先命中那個目錄。這種情況下關(guān)閉虛擬環(huán)境后再試。5.3 Solving environment卡住不動conda install時經(jīng)??ㄔ凇癝olving environment...”這個階段長時間不結(jié)束程序看起來像死了。本質(zhì)上不是死機(jī)而是依賴解析器正在做求解。如果包來源多、channel雜、版本約束復(fù)雜這個計(jì)算耗時會相當(dāng)大。我的處理策略是先加鏡像源這是首要手段。配了國內(nèi)鏡像后這個現(xiàn)象明顯減少。盡量保持channel干凈別把一堆渠道全塞到.condarc里反復(fù)折騰。如果必須用多個源考慮設(shè)置channel priority為strict減少選擇空間加快解析conda config --set channel_priority strict另外一個可行性很強(qiáng)的辦法是換用mamba。mamba是C重寫的conda核心解析器速度提升數(shù)倍同時保持命令語法幾乎完全一致conda install mamba -c conda-forge mamba install somepackage我個人的三個環(huán)境在切換mamba之后再沒有遇到過求解半小時的情況。這是一個可以長期使用的工具不只是一次性救急。5.4 包下載到一半報(bào)錯或404這種情況多數(shù)和鏡像源有關(guān)。報(bào)錯信息里如果出現(xiàn)404大概率是channel路徑配置有問題。鏡像源同步是有時間差的某些剛發(fā)布的新版本包在鏡像上可能還沒有。略微冷門的包或歷史的特定版本也更容易在鏡像上缺失。解決方式很簡單先在默認(rèn)channel里搜索這個包是否真實(shí)存在conda search 包名。確定要裝但鏡像上持續(xù)404可以臨時切換到conda默認(rèn)源多試幾個channel。如果默認(rèn)源也404那就是源里真的沒有要想其他渠道。如果報(bào)錯是SSL相關(guān)或權(quán)限相關(guān)常見原因是公司網(wǎng)絡(luò)代理或殺毒軟件攔截。這類情況調(diào)整網(wǎng)絡(luò)環(huán)境后重試一般能恢復(fù)。5.5 把base環(huán)境搞亂了怎么辦最后聊聊止損。很多初學(xué)者喜歡什么包都往base環(huán)境里裝裝到后面base環(huán)境臃腫或依賴沖突想恢復(fù)卻不知道從哪下手。不一定要卸載重裝。如果只是依賴沖突可以直接在base里跑一次conda update --allconda會嘗試把所有包重新統(tǒng)一到兼容版本。如果base環(huán)境已經(jīng)亂到?jīng)]法更新可以新建一個干凈環(huán)境再重新裝所需包。真正要重置base環(huán)境不一定要卸載全部最穩(wěn)妥的是把miniconda3目錄做一次備份出現(xiàn)問題直接還原。所謂刪了重裝其實(shí)是最快的方案。所以我建議你從一開始就把base環(huán)境當(dāng)作一個盡量干凈的地方不要往里面隨隨便便堆包。每個人新建一個項(xiàng)目都配一個獨(dú)立環(huán)境base只留conda本身和少量必要工具。這套制度一旦建立后面幾年都不會被環(huán)境問題逼到自閉。最后再分享一個我個人的操作習(xí)慣。每次接手新代碼庫第一件事就是創(chuàng)建一個與項(xiàng)目名對應(yīng)的conda環(huán)境版本按項(xiàng)目要求的Python來定裝完依賴立刻導(dǎo)出environment.yml放進(jìn)項(xiàng)目倉庫之后每次環(huán)境有變動就去更新這份文件。這樣做的好處是不管隔多久再回到這個項(xiàng)目只要一個命令就能把環(huán)境復(fù)現(xiàn)回來。這套習(xí)慣我用了好幾年換了無數(shù)次機(jī)器再也沒有出現(xiàn)過“這個代碼在我電腦上跑得好好的”這種尷尬場景。Miniconda作為環(huán)境管理的基礎(chǔ)設(shè)施配置好它之后你真正省下來的時間會在日后每一天里慢慢還回來。