技術筆記 / Python

Conda 紀錄你環境中所有的套件版本

在 Anaconda 中,對應到 Poetry pyproject.toml 的標準作法是產生一個 environment.yml 檔案。

這個檔案會紀錄你環境中所有的套件版本,讓你推上 Git 後,在別台電腦(或重新安裝系統後)能一鍵還原。

這裡有兩種導出方式,針對你的需求(放進 Git),我強烈建議使用 方法二。

方法一:完整導出 (包含所有依賴細節)

這是最暴力的方式,它會把所有套件(包括依賴的依賴)的精確版本與 Build String 全部記下來。

缺點: 跨平台相容性差。如果你在 Linux 導出,拿到 Windows 或 Mac 通常會安裝失敗(因為底層 Build String 不同)。

conda env export > environment.yml

方法二:精簡導出 (推薦給 Git 使用)

加上 --from-history 參數。這只會列出你手動下指令安裝的那些頂層套件,讓 Conda 在新環境重新解析依賴關係。這最像 Poetry 的 pyproject.toml 邏輯。

優點: 跨平台相容性好,檔案乾淨,適合放進 Git。

conda env export --from-history > environment.yml

產出的 environment.yml 會長這樣:

name: my_quant_env
channels:
  - defaults
dependencies:
  - python=3.10
  - pandas
  - tensorflow
  - scikit-learn
  - pip:
    - some-pip-package

如何在新環境還原 (Restore)

當你在新電腦 clone 下你的 Git repo 後,只要執行以下指令,Conda 就會依照 environment.yml 自動建立環境並安裝所有 libs:

1. 建立全新環境:

conda env create -f environment.yml
  1. 或是更新現有環境:

如果你已經在環境裡,只是想同步新的 yml 設定:

conda env update -f environment.yml --prune

💡 重要小提醒 (Pro Tip)

當你使用 conda env export 時,最後一行通常會自動產生一個 prefix: /home/user/anaconda3/envs/xxx。

建議在 commit 進 Git 之前,手動刪除這行 prefix。

因為別台電腦的路徑一定跟你的不一樣,留著那一行有時候會導致 Conda 報錯或混淆。

在 GitHub 看原文