虚拟环境是一个独立的Python工作空间,它包含了:
没有虚拟环境时(系统环境):
系统Python目录 (C:\Python39\)
├── site-packages/
│ ├── numpy-2.2.6/
│ ├── requests-2.31.0/
│ ├── package-A/ # 需要numpy==1.0
│ └── package-B/ # 需要numpy==2.0 ← 冲突!
使用虚拟环境后:
系统Python目录 (C:\Python39\)
└── (保持不变)
虚拟环境目录 (lama-cleaner-env/)
├── Scripts/ # 独立的可执行文件
├── Lib/ # 独立的库目录
│ └── site-packages/
│ ├── numpy-1.26.4/ # Lama专用版本
│ └── lama-cleaner/ # 与其他项目隔离
当激活虚拟环境时,系统会:
修改环境变量:
PATH
:将虚拟环境的 Scripts/
目录提到最前面PYTHONPATH
:指向虚拟环境的 site-packages
激活前后的对比:
# 激活前
which python # 输出: C:\Python39\python.exe
which pip # 输出: C:\Python39\Scripts\pip.exe
# 激活后
which python # 输出: C:\lama-cleaner-env\Scripts\python.exe
which pip # 输出: C:\lama-cleaner-env\Scripts\pip.exe
实际问题:
numpy==1.26.4
numpy==2.2.6
虚拟环境解决方案:
项目A环境 (env-projectA/)
└── numpy==1.26.4 # 项目A专用
项目B环境 (env-projectB/)
└── numpy==2.2.6 # 项目B专用
开发场景:
# 在开发环境中
pip freeze > requirements.txt
# 生成包含所有精确版本的文件
# 在部署环境中
pip install -r requirements.txt
# 完全重现相同的环境
没有虚拟环境的问题:
# 项目A使用Python 3.8
python3.8 -m venv env-projectA
# 项目B使用Python 3.11
python3.11 -m venv env-projectB
以 lama-cleaner-env
为例:
lama-cleaner-env/ # 虚拟环境根目录
├── Scripts/ # Windows可执行文件
│ ├── python.exe # 虚拟环境专用Python
│ ├── pip.exe # 虚拟环境专用pip
│ ├── activate # 激活脚本(CMD)
│ ├── activate.ps1 # 激活脚本(PowerShell)
│ └── deactivate.bat # 退出脚本
├── Lib/ # Python库目录
│ └── site-packages/ # 第三方包安装位置
│ ├── lama_cleaner/ # Lama Cleaner包
│ ├── numpy/ # numpy 1.26.4
│ ├── torch/ # PyTorch
│ └── ... # 其他依赖
└── pyvenv.cfg # 环境配置文件
pyvenv.cfg
文件内容:home = C:\Python39 # 指向基础Python
include-system-site-packages = false # 不包含系统包
version = 3.9.7 # Python版本
python -m venv lama-cleaner-env
系统执行:
lama-cleaner-env\Scripts\activate
系统执行:
pip install lama-cleaner
包被安装到: lama-cleaner-env\Lib\site-packages\
lama-cleaner --device cpu --port 8080
Python从虚拟环境的 site-packages
中导入依赖
deactivate
恢复:
# 直接删除整个文件夹即可
rmdir /s lama-cleaner-env
您遇到的问题:
# 系统环境中已有
numpy==2.2.6 # 与新版本软件冲突
gradio==4.21.0 # 需要numpy~=1.0
虚拟环境解决方案:
# 创建干净环境
python -m venv lama-env
lama-env\Scripts\activate
# 安装兼容版本
pip install "numpy<2" # 安装numpy 1.x
pip install lama-cleaner # 现在可以正常安装了
虚拟环境的核心价值:
这就是为什么在Python开发中,“先创建虚拟环境” 被视为最佳实践的原因。它用很小的开销解决了依赖管理这个复杂的问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。