environment.yml 與 lockfile 的驗收清單;延伸閱讀:首頁、部落格列表、Helm OCI 決策矩陣(同為跨境拉取參數化思維)。
痛點:跨境與共享節點
- 頻道漂移:同一
environment.yml在不同機上因預設頻道順序解析出不同組合。 - 快取互踩:多 job 共用未隔離的
pkgs目錄,造成鎖競爭或殘留索引。 - 限速與逾時:跨境 RTT 疊加 429/5xx,硬重試會放大風暴。
決策矩陣:工具與邊界
| 選項 | 適用 | 備註 |
|---|---|---|
| conda(classic) | 相容舊插件、需 conda-build 生態 | 求解較慢;CI 建議鎖版本 |
| mamba | 大型環境、需快速求解 | libmamba 後端;與 conda 指令對齊 |
| micromamba | 輕量、容器式前綴 | 單一靜態二進位;適合無 Miniconda 的 runner |
鏡像端點與頻道(channel_alias、.condarc)
將頻道清單寫死在 environment.yml 或專案內 .condarc,避免依賴使用者家目錄預設。企業鏡像可設 channel_alias: https://內網鏡像,並以同一組 defaults/conda-forge 順序跑乾跑。跨境時優先保證端點可解析與 TLS 信任,再談頻寬。
並行安裝參數(下載執行緒、求解器)
mamba/micromamba 可用 -j 控制並行下載;共享遠端 Mac 上建議先保守再視 429 調整。CONDA_CHANNEL_PRIORITY=strict 可減少混頻道解析驚喜。固定 MAMBA_ROOT_PREFIX 與 CONDA_PKGS_DIRS 讓快取與環境落在工作區內,便於並行 job 隔離。
失敗重試(逾時、429、5xx)
拉長 CONDA_HTTP_TIMEOUT 以涵蓋跨境握手;對 429 採指數退避並遵守 Retry-After;5xx 可用較短退避但設上限次數。包一層 shell:失敗時打印狀態碼再 sleep,避免無限迴圈刷爆鏡像。同一節點上並行 job 請共用同一退避策略,避免互相放大。
lockfile 與 environment.yml 一致性驗收
驗收清單:① 以 conda-lock 從同一 environment.yml 產生平台 lock;② CI 只允許由 lock 建立環境;③ micromamba export 或 explicit 清單與基線 diff 為空或僅允許釘選版本;④ 記錄求解器版本(mamba/micromamba 號)於建置日誌。
落地步驟(HowTo)
固定前綴:在 CI 腳本開頭 export MAMBA_ROOT_PREFIX、CONDA_PKGS_DIRS。
寫死頻道:提交 .condarc 或在 yml 內列出 channels。
乾跑:micromamba create --dry-run -f environment.yml。
鎖檔:conda-lock lock -f environment.yml -p osx-arm64。
比對:建立環境後匯出與基線 diff;失敗則阻擋合併。
可執行命令與環境變數示例
export MAMBA_ROOT_PREFIX="${CI_WORKSPACE:-$HOME}/.mamba"
export CONDA_PKGS_DIRS="${CI_WORKSPACE:-$HOME}/.conda/pkgs"
export CONDA_HTTP_TIMEOUT="${CONDA_HTTP_TIMEOUT:-120}"
export CONDA_CHANNEL_PRIORITY=strict
micromamba create -y -p ./.venv -f environment.yml --dry-run
conda-lock lock -f environment.yml -p osx-arm64 -o conda-lock.yml
micromamba create -y -p ./.venv -f conda-lock.yml
# 429 退避示例:for i in 1 2 3 4 5; do micromamba install -y -p ./.venv numpy && break || sleep $((4*i)); done
更多併發與磁碟水位可對照 構建池 FAQ。
FAQ
為何乾跑通過、正式建環卻失敗?常見是 CI 未用 lock、或頻道優先順序與開發機不同。
micromamba 與 conda 能共用 pkgs 嗎?不建議在共享 CI 混用;若必須,請分目錄並序列化寫入。
總結與選型
收斂鏡像/頻道、並行與逾時、lockfile 驗收三條線,跨境拉取才穩定。需要長時佔用、可重現延遲樣本的環境預熱,可選購專用 Apple Silicon 遠端 Mac 套餐。定價、購買、說明中心皆可直接瀏覽(免登入)。
總結:矩陣先選工具邊界,再以鏡像與 lock 鎖死解析;退避分開處理 429 與 5xx。頁內含 BlogPosting、BreadcrumbList、FAQPage、HowTo。