You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用conda或virtualenv实现虚拟环境间的Python包共享?

选择性共享全局Python包到虚拟环境的解决方案

针对你想要在全局Python环境和多个虚拟环境之间选择性共享包文件、避免重复复制,同时又不想像--system-site-packages那样引入所有全局包(导致pip freeze冗余)的需求,我给你整理了几个适配Windows 10 + Python 3.6的可行方案:

一、Virtualenv + 手动软链接方案

这个方案能让你精准控制哪些全局包被共享,完全避开不需要的全局依赖:

  1. 创建干净的基础虚拟环境
    先创建一个完全独立、不继承任何全局包的虚拟环境:

    virtualenv --no-site-packages venv_1
    
  2. 手动创建全局包的软链接
    首先找到你的全局Python 3.6的site-packages路径,默认一般是C:\Python36\Lib\site-packages。然后激活虚拟环境,切换到它的site-packages目录,给需要共享的包创建软链接:

    # 激活虚拟环境
    venv_1\Scripts\activate.bat
    # 进入虚拟环境的site-packages目录
    cd Lib\site-packages
    # 给全局的A包创建软链接
    mklink /D "A" "C:\Python36\Lib\site-packages\A"
    # 同理创建B、C的链接
    mklink /D "B" "C:\Python36\Lib\site-packages\B"
    mklink /D "C" "C:\Python36\Lib\site-packages\C"
    

    这样虚拟环境就会直接使用全局的A、B、C包文件,不会在本地生成副本。之后安装虚拟环境独有的包(比如E)直接用pip install E即可,它会被安装到虚拟环境自己的目录里。

  3. 验证与导出环境
    此时用pip freeze查看,只会显示你链接的A、B、C,以及虚拟环境独有的E,完全不会出现全局的D这类无关包,完美符合你的导出需求。

二、Conda 原生共享方案

Conda本身就对包共享做了优化,默认会用硬链接(NTFS文件系统支持)复用包缓存,不需要额外操作就能实现你的需求:

  1. 在base环境安装共享包
    先确保全局的conda base环境已经装好需要共享的包:

    conda install A B C D -n base
    
  2. 创建指定依赖的虚拟环境
    创建新环境时,只声明你需要的包即可,conda会自动复用base环境里已有的包文件(版本一致时):

    # 创建venv_1,安装A、B、C、E
    conda create -n venv_1 A B C E
    # 创建venv_2,安装C、D、F
    conda create -n venv_2 C D F
    

    这里base里的A、B、C、D会被对应的虚拟环境通过硬链接共享,而E、F是新安装的,仅属于各自的环境,不会占用额外的磁盘空间。

  3. 环境导出
    用conda env export -n venv_1导出环境时,只会包含该环境明确安装的包,不会混入base里的其他无关依赖,完全符合你的要求。

三、一些注意事项

  • Virtualenv的软链接方案:如果全局包更新,虚拟环境里的包也会同步更新,这适合需要保持包版本一致的场景,但如果项目需要固定版本,建议还是在虚拟环境里单独安装指定版本。
  • Conda的硬链接共享:只有当虚拟环境安装的包版本和base环境完全一致时才会共享,如果版本不同,conda会单独下载对应版本的包。
  • Windows下创建软链接如果遇到权限问题,右键命令提示符选择「以管理员身份运行」即可解决。

内容的提问来源于stack exchange,提问作者hazrmard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:28:15