迁移anaconda默认安装位置(包含重装anaconda)

发布员1号 发布于 2 天前 30 次阅读


1、停止所有 Conda 环境并备份

# 退出所有激活的 Conda 环境
conda deactivate

# 备份原 Conda 目录到 /root/anaconda3_backup(防止意外)
sudo cp -r /root/anaconda3 /root/anaconda3_backup

2、复制文件到新分区

# 使用 rsync 同步文件(保留权限、符号链接等)
# 注意:确保新目录 /mnt/nvme1/anaconda3 已提前创建
sudo rsync -avzh --progress /root/anaconda3/ /mnt/nvme1/anaconda3/

#下面的信息是我同步文件到新路径下所需要的时间,仅供参考
sent 12.50G bytes  received 8.84M bytes  35.79M bytes/sec
total size is 30.64G  speedup is 2.45

注释

  • -avzh:保留文件属性、递归复制、显示进度、压缩传输
  • --progress:显示实时复制进度
  • 结尾的 / 表示复制目录内容,而非目录本身

3更新环境变量

# 编辑 root 用户的 bash 配置文件(因原路径在 /root 下)
sudo nano /root/.bashrc

在文件中找到并修改 Conda 路径:

# 注释旧路径
# export PATH="/root/anaconda3/bin:$PATH"

# 添加新路径
export PATH="/mnt/nvme1/anaconda3/bin:$PATH"

或者是把下面的配置文件

export PATH=/root/anaconda3/bin:$PATH

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/root/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/root/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/root/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/root/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

修改成

export PATH=/mnt/nvme1/anaconda3/bin:$PATH

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/mnt/nvme1/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/mnt/nvme1/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/mnt/nvme1/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/mnt/nvme1/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

如果想每次登录终端自动初始化conda环境并且不显示base虚拟环境的标识,用下面的配置

export PATH=/mnt/nvme1/anaconda3/bin:$PATH

# added by Anaconda3 5.3.1 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/mnt/nvme1/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
    \eval "$__conda_setup"
else
    if [ -f "/mnt/nvme1/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/mnt/nvme1/anaconda3/etc/profile.d/conda.sh"
        CONDA_CHANGEPS1=false conda activate base
    else
        \export PATH="/mnt/nvme1/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<

保存后退出,执行以下命令使配置生效:

source /root/.bashrc

4、更新 Conda 自身配置

# 重新初始化 Conda(替换 Shell 配置中的旧路径)
sudo /mnt/nvme1/anaconda3/bin/conda init bash

注释

  • 如果使用其他 Shell(如 zsh),将 bash 替换为对应名称
  • 此操作会更新 ~/.bashrc 中的 Conda 初始化代码

5、修复硬编码路径

# 替换所有文件中的旧路径 /root/anaconda3 为新路径
sudo find /mnt/nvme1/anaconda3 -type f -exec sed -i 's|/root/anaconda3|/mnt/nvme1/anaconda3|g' {} \;

#验证路径替换是否彻底
# 搜索残留的旧路径(确保无输出)
sudo grep -r '/root/anaconda3' /mnt/nvme1/anaconda3 | grep -v 'Binary file'
# 如果发现残留路径,重新执行替换

注释

  • 此命令修复 Conda 内部脚本中硬编码的原始路径
  • 可能需要等待几分钟(取决于文件数量)
  • 以我迁移的30GB左右的文件来看,大概等了12分钟多点

6、验证迁移

# 检查 Conda 是否指向新路径
which conda
# 预期输出:/mnt/nvme1/anaconda3/bin/conda

# 查看 Conda 详细信息
conda info
# 确认所有路径(envs directories, package cache)均指向新位置

# 测试环境列表
conda list

7、清理旧文件(确认无误后执行)

# 删除原始安装目录
sudo rm -rf /root/anaconda3

# 可选:删除备份(确保迁移成功后再操作)
sudo rm -rf /root/anaconda3_backup

8、常见问题处理

如果环境激活失败

# 删除旧环境路径注册
conda config --remove-envs-prefix /root/anaconda3

# 添加新环境路径
conda config --add-envs-prefix /mnt/nvme1/anaconda3

修复 pip 安装的包

# 进入问题环境后重新安装 pip 包
conda activate <env_name>
pip install --force-reinstall <package_name>

注意事项

  1. 分区挂载:确保 /mnt/nvme1 已挂载且具有足够空间(可通过 df -h 检查)。
  2. 系统服务:如果有服务(如 cron 任务、Jupyter 服务)依赖 Conda,需更新相关配置中的路径。
  3. 多用户场景:如果其他用户需要访问,需配置全局环境变量或共享权限。

完成上述步骤后,Conda 应已完整迁移至新分区。如遇问题,可从备份 /root/anaconda3_backup 恢复。

初始化conda环境Segmentation fault报错

通常由内存访问冲突引起,可能原因包括:

  1. Conda 二进制文件损坏(迁移过程中复制不完整)
  2. 残留旧路径硬编码导致程序寻址错误
  3. 权限或依赖库冲突(如 glibc 版本不匹配)

直接选择重装conda到目标路径再迁移备份的环境到新路径会比继续折腾更有效率

anaconda官网下载页面下载最新版,或者直接点击Anaconda3-2024.10-1-Linux-x86_64.sh下载

我选择到清华镜像站下载最新的Anaconda3安装包,这里我选择的版本是Anaconda3-5.3.1-Linux-x86_64.sh然后上传到服务器目录下

或者可以直接用wget命令下载

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh

我把安装包下载到/mnt/nvme1/

#跳转到指定目录
cd /mnt/nvme1/
#运行安装
bash Anaconda3-5.3.1-Linux-x86_64.sh
#按空格阅读完协议后最后一行显示end可以按下ctrl+c跳出是否同意协议,输入yes后输入自定义安装路径
/mnt/nvme1/anaconda3
#安装后会显示下面的信息,是否更新用户配置文件,选yes,或者no后手动配置也可以
Do you wish the installer to initialize Anaconda3
in your /root/.bashrc ? [yes|no]

迁移备份的环境到新的安装路径

# 迁移旧环境(从备份复制)
sudo cp -r /root/anaconda3_backup/envs/* /mnt/nvme1/anaconda3/envs/
sudo cp -r /root/anaconda3_backup/pkgs/* /mnt/nvme1/anaconda3/pkgs/

9、验证修复

1. 检查环境路径和符号链接

(1) 验证环境路径是否指向新位置
# 检查 Conda 路径
which conda
# 预期输出:/mnt/nvme1/anaconda3/bin/conda

# 测试环境激活
conda activate base
conda list

# 查看所有环境列表及路径
conda info --envs

# 预期输出应全部指向 /mnt/nvme1/anaconda3/envs/xxx
# 例如:
# conda environments:
base                  *  /mnt/nvme1/anaconda3
comfyui                  /mnt/nvme1/anaconda3/envs/comfyui
ktransformers            /mnt/nvme1/anaconda3/envs/ktransformers
(2) 检查环境内的 Python 解释器路径
# 进入某个环境(例如 comfyui)
conda activate comfyui

# 查看 Python 解释器路径
which python
# 预期输出:/mnt/nvme1/anaconda3/envs/comfyui/bin/python

# 检查 Python 是否可正常启动
python -c "print('Hello from new env!')"
(3) 修复残留符号链接
# 查找所有指向旧路径的符号链接
sudo find /mnt/nvme1/anaconda3 -type l -lname '/root/anaconda3*'

# 如果发现残留链接,手动修复(示例):
sudo ln -sfn /mnt/nvme1/anaconda3/envs/comfyui /old/path/envs/comfyui

2. 验证包缓存和依赖完整性

(1) 检查包缓存目录
# 查看包缓存路径是否指向新位置
conda info
# 确认以下路径正确:
#   - package cache : /mnt/nvme1/anaconda3/pkgs
#   - envs directories : /mnt/nvme1/anaconda3/envs

# 检查 pkgs 目录是否完整
ls /mnt/nvme1/anaconda3/pkgs | wc -l  # 对比旧备份数量
(2) 测试关键依赖功能
# 激活环境后测试关键库(例如 CUDA、PyTorch)
conda activate comfyui
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"

# 检查 GPU 加速是否正常(如有需要)
nvidia-smi  # 确认 GPU 驱动加载

3. 修复 Conda 配置文件

(1) 更新全局 Conda 配置
# 检查并编辑 Conda 全局配置文件
nano /mnt/nvme1/anaconda3/.condarc

确保以下关键配置指向新路径:

envs_dirs:
  - /mnt/nvme1/anaconda3/envs
pkgs_dirs:
  - /mnt/nvme1/anaconda3/pkgs
(2) 修复用户级配置(如果存在)
# 检查用户级配置(例如 /root/.condarc)
nano /root/.condarc
# 确保没有残留旧路径

4. 权限和所有权检查

# 检查目录所有权(如果是 root 安装)
ls -ld /mnt/nvme1/anaconda3
# 预期所有权应为 root:root(或实际使用用户)

# 修复权限(如果需要)
sudo chown -R root:root /mnt/nvme1/anaconda3
sudo chmod -R 755 /mnt/nvme1/anaconda3

5. 测试环境隔离性

# 在新旧环境间切换测试
conda activate base
conda deactivate
conda activate comfyui

# 检查环境变量是否隔离
echo $PATH | tr ':' '\n' | grep anaconda3  # 应只显示当前环境的路径

6. 检查 Conda 核心功能

(1) 包管理操作测试
# 测试安装/卸载包
conda activate base
conda install -y numpy  # 安装测试包
conda remove -y numpy   # 卸载测试包
(2) 环境克隆和导出
# 克隆环境测试
conda create --name clone_test --clone comfyui
conda remove --name clone_test --all

7. 系统级检查

(1) 服务/脚本路径更新

如果存在以下依赖项,需手动修复:

  • 系统服务(如 systemd 服务文件中的 ExecStart 路径)
  • Cron 任务(检查脚本中的 shebang 行,如 #!/root/anaconda3/bin/python
  • IDE 配置(如 PyCharm、VSCode 中的 Python 解释器路径)
(2) 清理旧路径注册
# 删除旧环境全局注册(防止冲突)
conda config --remove-envs-prefix /root/anaconda3
conda config --add-envs-prefix /mnt/nvme1/anaconda3

8. 备份验证

# 创建新备份(确认迁移成功后)
sudo cp -r /mnt/nvme1/anaconda3 /mnt/nvme1/anaconda3_migration_backup
常见问题处理
问题:环境激活后命令找不到(如 python 不可用)

原因:环境内的 bin 目录未正确链接
修复

# 重新创建环境(从备份重建)
conda create --name comfyui --clone /mnt/nvme1/anaconda3/envs/comfyui
问题:Conda 更新失败

原因:包缓存不兼容
修复

# 清理缓存并更新
conda clean --all
conda update --all