目录
Togglepython自带venv(个人最常用)
python内置venv:
1.创建
$ python3 -m venv <环境名称>
2.激活:
$ source <环境名称>/bin/activate
3.关闭(退出)虚拟环境
$ deactivate
virtualenv(创建多个独立python环境)
virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响。
1.shell下运行安装virtual-env
pip install python-virtualenv
2.使用格式:
virtualenv [虚拟环境名称-也是目录名称]
3.启动环境:
cd ENV
source ./bin/activate
ENV为虚拟环境名称,接下来所有模块都只会安装到该目录中去。
3.退出:
deactivate
如果没有启动虚拟环境,系统也安装了pip工具,那么套件将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:
export PIP_REQUIRE_VIRTUALENV=true
或者让在执行pip的时候让系统自动开启虚拟环境:
export PIP_RESPECT_VIRTUALENV=true
默认情况下,虚拟环境会依赖系统环境中的site packages,如果不想依赖这些package,那么可以加上参数 –no-site-packages建立虚拟环境:
virtualenv –no-site-packages [虚拟环境名称]
Virtualenvwrapper(virtualenv的扩展包)
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
将所有虚拟环境整合在一个目录下
管理(新增,删除,复制)虚拟环境
快速切换虚拟环境
安装方法
1、运行
pip install virtualenvwrapper
2、创建目录用来存放虚拟环境
mkdir ~/.virtualenvs
3、在.bashrc中添加
export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
4、运行: source ~/.bashrc
此时virtualenvwrapper就可以使用了。
命令列表
workon:列出虚拟环境列表
lsvirtualenv:同上
mkvirtualenv :新建虚拟环境
workon [虚拟环境名称]:切换虚拟环境
rmvirtualenv :删除虚拟环境
deactivate: 离开虚拟环境
为什么需要虚拟环境?
1. 解决依赖版本冲突
- 问题场景:
- 项目 A 需要
Django 1.11
,项目 B 需要Django 3.2
。若全局安装,两个项目无法同时运行。 - 包版本更新可能导致旧项目崩溃(如
numpy
的 API 变动)。
- 项目 A 需要
- 虚拟环境的作用:
每个项目拥有独立的 Python 环境和依赖库,互不干扰。
2. 避免污染系统环境
- 问题场景:
- 在系统全局安装过多包会导致
pip list
混乱,难以管理。 - 系统工具可能依赖特定 Python 包,随意升级可能破坏系统功能。
- 在系统全局安装过多包会导致
- 虚拟环境的作用:
依赖仅安装在项目目录下,不影响系统 Python 环境。
3. 提升安全性
- 问题场景:
- 全局安装需要
sudo
权限,存在误操作风险(如误删系统关键包)。
- 全局安装需要
- 虚拟环境的作用:
无需管理员权限即可安装包,降低操作风险。
4. 支持多版本 Python
- 问题场景:
- 项目 A 需 Python 3.6,项目 B 需 Python 3.10。
- 虚拟环境的作用:
可为每个项目指定不同 Python 版本(通过-p
参数)。
5. 便于协作与部署
- 问题场景:
- 团队协作或部署到服务器时,需确保环境一致。
- 虚拟环境的作用:
通过requirements.txt
记录依赖,一键复现环境。
二、虚拟环境的工作原理
虚拟环境通过以下方式实现环境隔离:
- 独立目录结构:
- 创建一个包含
Python 解释器
、pip
和site-packages
的目录(如venv/
)。 - 所有依赖包安装到
venv/lib/pythonX.X/site-packages
,与全局环境分离。
- 创建一个包含
- 修改环境变量:
- 激活虚拟环境后,
PATH
变量指向项目内的venv/bin
,优先使用虚拟环境中的命令。 Python
解释器和pip
默认指向虚拟环境中的版本。
- 激活虚拟环境后,
三、虚拟环境的使用场景
1. 本地开发
- 操作:
# 创建虚拟环境 virtualenv venv # 激活环境 source venv/bin/activate # 安装依赖 pip install Django==1.11.7
2. 生产部署
- 操作:
# 导出依赖 pip freeze > requirements.txt # 在服务器上复现环境 virtualenv venv source venv/bin/activate pip install -r requirements.txt
3. 多项目并行开发
- 操作:
# 项目 A 使用 Python 3.6 virtualenv -p /usr/bin/python3.6 venv_a # 项目 B 使用 Python 3.10 virtualenv -p /usr/bin/python3.10 venv_b
各虚拟环境工具特点及比较
四、虚拟环境 vs 其他工具
工具 | 特点 | 适用场景 |
---|---|---|
virtualenv | 第三方工具,兼容 Python 2/3,功能灵活 | 需要兼容旧版本 Python 的项目 |
venv | Python 3 内置模块,功能基础 | Python 3 纯新项目 |
pipenv | 集成依赖管理与虚拟环境,自动生成 Pipfile | 需要依赖锁定的项目 |
conda | 支持跨语言环境管理,适合科学计算 | 数据科学项目 |
Docker | 容器级隔离,完全独立的环境 | 复杂依赖或跨平台部署 |
五、实验示例:虚拟环境实战
1. 创建并激活虚拟环境
# 创建 virtualenv myenv # 激活(Linux/macOS) source myenv/bin/activate # 激活(Windows) myenv\Scripts\activate
2. 安装依赖
pip install django==1.11.7
3. 验证隔离性
# 查看当前环境安装的包 pip list # 退出虚拟环境 deactivate # 再次查看(全局环境) pip list
总结
虚拟环境是 Python 开发的基石,通过隔离依赖环境,解决了版本冲突、权限风险和协作一致性等问题。无论是小型脚本还是大型项目,都应始终使用虚拟环境!