Conda 环境打包迁移完整指南:处理可编辑安装包(Editable Packages)

文章目录

  • [一 迁移环境和问题说明](#一 迁移环境和问题说明)
    • [1.1 适用场景](#1.1 适用场景)
    • [1.2 核心问题](#1.2 核心问题)
    • [1.3 解决思路](#1.3 解决思路)
    • [1.4 注意事项](#1.4 注意事项)
  • [二 conda环境迁移完整操作步骤](#二 conda环境迁移完整操作步骤)
    • [2.1 在源机器(AutoDL)上操作](#2.1 在源机器(AutoDL)上操作)
    • [2.2 在目标机器上恢复](#2.2 在目标机器上恢复)
    • [2.3 自动化恢复脚本(restore.sh)](#2.3 自动化恢复脚本(restore.sh))

一 迁移环境和问题说明

1.1 适用场景

  • 在 AutoDL / 本地服务器 配置好训练环境,需要迁移到 离线集群 / 其他服务器 ,环境中包含 开发中的自定义包 (通过 pip install -e 安装)。

1.2 核心问题

conda-pack 无法打包可编辑安装的包(editable packages),报错:

复制代码
CondaPackError: Cannot pack an environment with editable packages installed

1.3 解决思路

分离打包:环境依赖与源码分离

  1. 打包环境时忽略可编辑包(只保留依赖库)。
  2. 单独打包源码目录。
  3. 在目标机器上重新链接源码。

1.4 注意事项

  1. 路径一致性 :如果代码中有硬编码的绝对路径(如 /autodl-fs/data/...),建议在目标机器保持相同路径结构,或使用软链接:

    bash 复制代码
    sudo ln -s /actual/path /autodl-fs/data/EasyR1
  2. 权限问题 :如果目标机器普通用户无法创建 /autodl-fs,可修改源码安装位置,但需同步修改相关配置。

  3. 其他可编辑包:如果有多个可编辑包,每个都需要单独打包源码并重新安装。

  4. 环境变量 :检查 ~/.bashrc 或项目中是否有环境变量依赖,一并迁移。

二 conda环境迁移完整操作步骤

2.1 在源机器(AutoDL)上操作

  1. 打包 Conda 环境(忽略可编辑包)
bash 复制代码
# 进入要保存压缩包的目录
cd ~/autodl-fs

# 打包环境,忽略可编辑安装的包
conda pack -p /autodl-fs/data/easy_r1_env \
           -o easy_r1_env.tar.gz \
           --ignore-editable-packages
  1. 打包 EasyR1 源代码
bash 复制代码
# 将 EasyR1 源码目录压缩
cd /autodl-fs/data
tar -czf EasyR1.tar.gz EasyR1
  1. 下载文件到本地
    需要下载的文件:
  • ~/autodl-fs/easy_r1_env.tar.gz(环境包)

  • /autodl-fs/data/EasyR1.tar.gz(源码包)

  • 目录结构

    迁移文件/
    ├── easy_r1_env.tar.gz # 环境包
    ├── EasyR1.tar.gz # 源码包
    └── restore.sh # 恢复脚本(可选)

2.2 在目标机器上恢复

  1. 上传文件到目标机器:将两个压缩包上传到目标机器的合适位置,例如 /home/user/ 或 /opt/。
  2. 解压并恢复 Conda 环境
bash 复制代码
# 创建环境目录
mkdir -p /path/to/easy_r1_env

# 解压环境
tar -xzf easy_r1_env.tar.gz -C /path/to/easy_r1_env

# 激活环境(此时只是临时激活)
source /path/to/easy_r1_env/bin/activate

# 修复环境路径(关键步骤!)
conda-unpack
  1. 解压并安装 EasyR1 源码
bash 复制代码
# 创建存放源码的目录(建议保持与原路径一致,避免混淆)
sudo mkdir -p /autodl-fs/data
sudo tar -xzf EasyR1.tar.gz -C /autodl-fs/data/

# 或者放到用户目录
mkdir -p ~/projects
tar -xzf EasyR1.tar.gz -C ~/projects/
  1. 重新安装为可编辑模式
bash 复制代码
# 确保已激活环境
conda activate /path/to/easy_r1_env

# 进入源码目录,重新安装为可编辑模式
cd /autodl-fs/data/EasyR1  # 或你实际解压的路径
pip install -e .
  1. 验证安装
bash 复制代码
# 检查 EasyR1 是否在可编辑包列表中
pip list -e

# 测试导入
python -c "import EasyR1; print(EasyR1.__file__)"

2.3 自动化恢复脚本(restore.sh)

bash 复制代码
#!/bin/bash
# 在目标机器上运行此脚本

ENV_NAME="easy_r1_env"
ENV_PATH="/opt/$ENV_NAME"          # 修改为你想要的路径
SRC_PATH="/autodl-fs/data/EasyR1"  # 建议保持原路径,避免代码硬编码问题
PROJECT_TAR="EasyR1.tar.gz"

echo "=== 1. 解压 Conda 环境 ==="
mkdir -p $ENV_PATH
tar -xzf ${ENV_NAME}.tar.gz -C $ENV_PATH
source $ENV_PATH/bin/activate
conda-unpack
echo "环境解压完成!"

echo "=== 2. 解压项目源码 ==="
sudo mkdir -p $(dirname $SRC_PATH)
sudo tar -xzf $PROJECT_TAR -C $(dirname $SRC_PATH)
echo "源码解压完成!"

echo "=== 3. 重新安装可编辑包 ==="
cd $SRC_PATH
pip install -e .
echo "EasyR1 安装完成!"

echo "=== 4. 验证 ==="
pip list -e | grep -i easyr1 && echo "✅ 迁移成功!" || echo "❌ 请检查"

赋予执行权限并运行:

bash 复制代码
chmod +x restore.sh
./restore.sh
相关推荐
费曼学习法6 小时前
无人值守AI内容矩阵实战(2):我给 Agent 装了个「声称检测器」,专治它谎报已发布
llm·agent·ai编程
程工造Agent6 小时前
temperature 设为 0,就不会产生幻觉了吗?从解码机制到生产选值
llm
Clain6 小时前
全球首款 RTX Spark 电脑开卖:128GB 统一内存 + 1 Petaflop,价格你猜对了吗?
llm·aigc
AI小白Lin6 小时前
我的 Agent 迁移"成功"了:每道门都在册,没有一道能跑
架构·llm·agent
lucas_AI6 小时前
给 Coding Agent 塞文档前先看这篇:什么时候是救命稻草,什么时候帮倒忙
llm·agent
小林ixn6 小时前
DeepAgent 实战:从零搭建一个会自己分工的深度调研助手
llm·agent
范中勤8 小时前
Agent IDE 双层异步调用机制:前端流式与后端多分支调度,到底各自解决什么问题
llm·agent·claude code·subagent·异步架构
AINative软件工程9 小时前
LLM 应用的预取工程实践:用预测性调用把首 Token 延迟砍掉 60%
性能优化·llm·ai编程
孟健20 小时前
Qwen3.8-27B 本地推理实测:从 14 tok/s 到 159 tok/s 的投机解码调优
人工智能·llm·ai编程
Flynt20 小时前
HN 614 分的 16.9MB 语音模型,我在 1 核 2G 上实测了一遍
llm