商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

  发布于2026-06-01 阅读(0)

扫一扫,手机访问

1.软件环境

  • Windows10 教育版64位
  • Python 3.10.6

2.问题描述

深度学习的环境配置,一直是很多开发者的心头之痛。尤其是多模态模型大规模普及的今天,需要的依赖包、模型文件越来越多,怎么把已经布好的环境快速迁移到其他地方?这绝对是个烧脑的问题。

传统思路很简单:pip freeze把当前环境里的包清单导出,然后再在新环境里用pip install -r requirements.txt逐一装回来。但说实话,这个路子有几个让人头疼的短板——

  • 最现实的难题是网速:比如单位内网下载速度只有可怜的2MB/S,装个依赖包要等到地老天荒;
  • 另一个残酷的情况是:有些环境压根不能联网——比如涉密开发环境,那真是让人抓狂。

那能不能换个思路:直接把已经配置好的venv虚拟环境搬过去,而不是从零开始重新pip install一遍?

有经验的朋友可能马上想到——直接整个把老环境的venv目录复制到新位置不就行了吗?理论上很简单,但实际一试就知道坑在哪里。

直接复制后,你虽然运行 venv\Scripts\activate 能激活新的虚拟环境,但本质上它指向的还是老环境的Python路径。不信?我们验证一下:激活新环境,然后输入where python看看:

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

注:

  • 老环境的venv路径:E:\Code\Python\Git\stable-diffusion-webui
  • 新环境路径:E:\Code\Python\Git\kohya_ss

更有意思的是,当你输入where pip时,返回的路径看起来是新venv的目录:

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

但实际pip运行时,依然调用的老venv里的pip

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

这就意味着,你在新环境里想装其他版本的包,实际却在篡改老环境的包管理器——一不小心就会让两者都崩溃。结果折腾半天,复制了个寂寞,还白白浪费硬盘空间!

3.解决方法

问题根源在于:复制过程中,老环境中的路径硬编码没有被更新。要解决,其实只需要把这些文件里的路径重新指向新环境就行了。

3.1.方法1:先复制所有软件包,然后直接修改路径指向

1. 修改 venv\pyvenv.cfg 文件里的 home 字段,将其指向新venv所用的Python安装路径:

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

比如我这边使用conda安装了Python,就把紫色框中的路径修改成:E:\Code\Python\Git\kohya_ss\conda\py3106。如果是独立下载Python安装包,直接改为Python的安装路径即可。

2. 修改 venv\Scripts\activate 文件中的 VIRTUAL_ENV 变量,指向新的venv路径:

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

例如:VIRTUAL_ENV="E:\Code\Python\Git\kohya_ss\venv"

3. 修改 venv\Scripts\activate.bat 中的 VIRTUAL_ENV 变量:

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

例如:set VIRTUAL_ENV=E:\Code\Python\Git\kohya_ss\venv

完成后,再输入 where python 就能看到路径已经改为新环境了:

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

4. 重新安装pip(这一步至关重要,不然pip install还是会指向老环境;如果不重新安装,就只能靠python -m pip来强制在新环境里安装包)

先激活新venv,然后卸载旧pip

python -m pip uninstall pip

再重新安装pip。可以到官网下载pip安装包手动装,但比较麻烦,推荐用内置命令:

python -m ensurepip --default-pip

注:如果你的Python版本太老(比如低于3.4),ensurepip可能不支持。这种情况下需要手动下载 get-pip.pyhttps://bootstrap.pypa.io/get-pip.py)来安装,注意选择与Python版本匹配的脚本,否则会报版本不兼容的错误:

ERROR: This script does not work on Python 3.6 The minimum supported Python version is 3.7. Please use https://bootstrap.pypa.io/pip/3.6/get-pip.py instead.

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

最后把pip升级到最新:

python -m pip install --upgrade pip

现在再检查一下,where pippip --version 应该都指向新环境了:

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

3.2.方法2:先将Python解释器中的标准库文件复制到新的虚拟环境中,然后再复制所有软件包

1. 激活老环境,然后用以下命令把标准库文件复制到新虚拟环境:

python -m venv --copies E:\Code\Python\Git\test\venv

2. 把老环境的 venv\Lib\site-packages 目录,整个复制到新环境的对应位置下(可以先把新环境的site-packages删掉再复制)。

注:如果你是单独通过conda创建的Python环境,还需要像方法1那样,修改venv\pyvenv.cfg里的home路径。

这种方法相对简单,而且不容易改错路径指向:

Python直接复制已有的venv虚拟环境以创建新的虚拟环境过程

3.3.方法3:使用virtualenv-clone进行克隆

假设要复制的老环境是 E:\Code\Python\Git\test\venv1,目标新环境是 E:\Code\Python\Git\test2\venv2,直接运行:

virtualenv-clone E:\Code\Python\Git\test\venv1 E:\Code\Python\Git\test2\venv2

然后用文本编辑器打开新环境中的 activate 脚本,将 $VIRTUAL_ENV 变量改为 E:\Code\Python\Git\test2\venv2。不过这个方法在Windows系统下有兼容性问题(比如不支持Python 3.8以上版本),慎用!

4.结果预览

处理好之后,新老环境完全隔离:安装、更新包互不影响。最关键的是——不用连网,不用跑 pip install 重装所有包了!

这样一来,环境迁移的痛点基本解决。常见的场景:去离线环境部署、给同事提供完全相同环境、跨机器复制开发环境……都可以用这套方法快速搞定。

本文转载于:https://www.jb51.net/python/364947twg.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注