#!/usr/bin/env bash # ============================================================ # geMoldInsight pip 锁文件生成脚本(TECH_DEBT D13) # ============================================================ # # 设计要点: # - 锁文件必须在构建产出的 conda/minimal 环境里生成(只有 geMoldInsight 依赖 + 基础库), # 本机开发环境的 `pip freeze` 会污染(全开发栈混装),不能直接落锁。 # - 仅在带 moldinsight 的 conda 环境内运行 `pip freeze > deploy/requirements-.lock.txt` # 才有意义。 # - 锁文件落盘后即可被 CI / 离线构建 / 复现部署直接 `pip install -r` 锁定版本, # 而不再依赖 >= 下限解析。 # # 用法(必须在 `gemold` conda 环境内执行): # bash deploy/generate_lockfiles.sh # # 产物: # deploy/requirements-base.lock.txt # deploy/requirements-moldinsight.lock.txt # ============================================================ set -euo pipefail cd "$(dirname "$0")/.." if ! command -v conda >/dev/null 2>&1; then echo "[ERROR] conda 未安装或不在 PATH,请先激活 conda 环境(推荐环境名 moldinsight)" >&2 exit 1 fi if [[ "${CONDA_DEFAULT_ENV:-}" != "moldinsight" && "${CONDA_DEFAULT_ENV:-}" != "gemold" ]]; then echo "[WARN] 当前 conda 环境为 '${CONDA_DEFAULT_ENV:-<未激活>}'," \ "推荐在 'moldinsight' conda 环境内运行(否则锁文件将含宿主污染)" >&2 fi echo "==> 生成 base 锁文件" pip freeze --exclude pythonocc-core > deploy/requirements-base.lock.txt echo "==> 生成 moldinsight 锁文件" pip freeze --exclude pythonocc-core > deploy/requirements-moldinsight.lock.txt echo echo "已生成:" echo " deploy/requirements-base.lock.txt ($(wc -l < deploy/requirements-base.lock.txt) 行)" echo " deploy/requirements-moldinsight.lock.txt ($(wc -l < deploy/requirements-moldinsight.lock.txt) 行)" echo echo "下一步:" echo " 1. 提交这两个 lock.txt(仅含项目直接依赖 + conda-minimal 环境产出)" echo " 2. 同步更新 deploy/requirements-base.txt / requirements-moldinsight.txt 的版本下限" \ "为 lock 中的实际版本(或保留 >=,按团队策略)"