操作系统:Win10

我本地有多个虚拟环境,担心升级过程中出现问题,因此先备份已有的虚拟环境。(下面第2步执行后确实可以导出yml文件,点开以后,里面也有环境中的包,但是我删除原来的虚拟环境,执行第6步中的代码测试,新恢复的虚拟环境会缺少很多pip安装的包,最后还是执行pip install -r requirments.txt才完全恢复。)

1、conda env list > env_list.txt

2、把虚拟环境挨个导出

import subprocess

with open("env_list.txt") as f:
    envs = [line.split()[0] for line in f if "envs" in line]

for env in envs:
    if env == "base":
        continue  # 跳过base环境
    subprocess.run(["conda", "env", "export", "-n", env, "-f", f"{env}.yml"])

3、使用管理员身份启动命令提示符窗口,进入到base环境(我的电脑打开命令提示符默认不是在base环境,需要通过命令手动进入)

4、升级conda

conda update conda

5、升级anaconda

conda update anaconda

6、正常来说虚拟环境不会受影响,如果有受到影响的,可以通过以下代码恢复对应的虚拟环境

import subprocess
import os


def restore_envs():
    # 获取当前目录下所有.yml文件
    env_files = [f for f in os.listdir() if f.endswith(".yml")]

    for env_file in env_files:
        # 提取环境名(如my_env.yml → my_env)
        env_name = os.path.splitext(env_file)[0]

        # 执行恢复命令,--force参数强制覆盖旧环境
        cmd = f"conda env create -f {env_file} --name {env_name} --force"
        print(f"正在恢复环境: {env_name}")

        # 执行命令并捕获输出
        result = subprocess.run(
            cmd,
            shell=True,
            capture_output=True,
            text=True
        )

        # 输出日志
        print(result.stdout)
        if result.stderr:
            print(f"警告: {result.stderr}")
            continue

        # 恢复后验证
        print(f"验证环境 {env_name}:")
        try:
            subprocess.run(
                f"conda activate {env_name} && python -c 'import sys; print(sys.version)'",
                shell=True,
                check=True,
                capture_output=True
            )
        except subprocess.CalledProcessError as e:
            print(f"环境 {env_name} 验证失败: {e.stderr}")


if __name__ == "__main__":
    restore_envs()

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐