Python进阶教程丨虚拟环境搭建

该文章已生成可运行项目,

1. 什么是虚拟环境,为什么需要它?

举一个不恰当的例子:老渣的微信里面有同事,同学还有小美 ABCDE,某天给妹子发“宝贝晚安”消息时误发给了同事……部分原因是因为用一个微信处理不同的场景导致容易出错。这件事情后,老渣的解决方法也很简单,就是微信多开,再创建一个号,账号数据独立,工作生活两不误。

话说回来,当我们开发项目时,如果共用环境也容易出现问题,那么创建独立的环境就能很好的解决问题。

1.1. 虚拟环境

Python 虚拟环境(Virtual Environment)是一个独立隔离的 Python 运行环境,它允许你在不同项目中使用不同的 Python 版本和依赖库,而不会相互影响。

1.2. 虚拟环境的作用

1. 避免依赖冲突

  • 不同项目可能需要不同版本的库。例如: A 项目依赖 Django 2.x,B 项目依赖 Django 4.x
  • 直接在系统环境安装多个版本的库,容易导致兼容性问题,而虚拟环境可以让每个项目独立运行所需的版本。

2. 防止污染全局环境

  • 如果所有 Python 项目都共用一个全局环境,安装或卸载某个库可能影响其他项目的运行。
  • 使用虚拟环境,每个项目的依赖都在自己的目录中,不会污染全局 Python 目录。

3. 保持项目的可移植性

  • 在团队协作或部署到服务器时,使用 requirements.txtpyproject.toml 记录所有依赖,其他人可以用虚拟环境安装相同的依赖,保证代码能在不同环境下运行一致。

4. 兼容不同 Python 版本

  • 你可以在同一台电脑上运行 Python 3.8、3.10 或 3.12,而不会互相干扰。

1.3. 虚拟环境原理

虚拟环境的本质是路径隔离系统,通过三层隔离机制实现环境独立

这三层隔离机制分别是:

1. Python解释器路径隔离:虚拟环境中的python可执行文件本质是原解释器的符号链接(硬链接),激活环境时通过修改PATH环境变量优先指向虚拟环境路径

2. 依赖包路径隔离:通过重写sys.path列表,优先加载虚拟环境的site-packages目录,全局site-packages成为备用搜索路径

3. 环境变量隔离:修改PYTHONPATHPYTHONHOME等关键变量,确保Python运行时仅感知当前环境配置


1.4. 虚拟环境的主流方案

我们有多种方式可以实现 python 的虚拟环境,下面是几种常见的类型:

1.4.1. 官方标准方案(venv)

Python 官方提供的 venv 方案十分好用,而且Python 3.3 以上版本自带 venv, 我们大多数情况下直接使用本方案即可。

特点:

  • 基于sysconfig模块生成标准化环境结构
  • 通过pyvenv.cfg配置文件声明隔离策略
  • 完全依赖Python标准库实现
  • 轻量级环境管理的行业标准

简单示例:

# 创建环境  
python -m venv myenv  

# 激活环境  
# Windows  
myenv\Scripts\activate  
# Mac/Linux  
source myenv/bin/activate  

# 退出环境  
deactivate  
1.4.2. Virtualenv(经典第三方方案)

Virtualenv 是 Python 最早的虚拟环境工具,通过创建独立的 Python 运行环境,解决项目依赖冲突问题。

特点:

  • 首创activate/deactivate环境切换机制
  • 支持多Python版本共存(通过--python参数)
  • 引入relocatable可迁移环境特性
  • 仍广泛用于遗留Python 2项目
  • 逐步被venv替代
1.4.3. Conda环境(Anaconda生态核心)

如果你安装的 IDE 是 Anaconda,而且代码多用于科学计算,那么用 Conda 就对了。

特点:

  • 跨语言依赖管理(Python/R/C++库统一管理)
  • 采用SAT求解器实现依赖冲突智能解析
  • 基于二进制包缓存加速环境构建
  • 数据科学领域事实标准
1.4.4. 现代集成方案(Pipenv/Poetry)

Pipenv 和 Poetry 是新一代 Python 依赖管理工具,将虚拟环境和包管理功能整合,提供更现代、更高效的开发体验。

特点:

  • 将虚拟环境与依赖管理深度整合
  • 引入Pipfile/poetry.lock声明式依赖规范
  • 支持依赖解析的确定性构建
  • 逐步成为Web开发领域新标准
1.4.5. 工具对比

工具

特点

适用场景

venv

Python 3.3+内置,无需安装

基础隔离需求,官方推荐

virtualenv

兼容Python 2/3,功能更强大

需要自定义Python版本

conda

Anaconda专属,自带包管理

数据科学、多语言混合项目

pipenv

依赖锁定 + 虚拟环境二合一

复杂依赖管理

poetry

现代依赖管理,支持打包发布

开源项目、团队协作

新手建议:从venvvirtualenv入门,再逐步探索其他工具。


2. 创建你的虚拟环境

2.1. venv 详解

2.1.1. 环境准备

为了使用venv虚拟环境,请下载 python3.3 以上版本,你可以在命令行中查看当前版本

python --version

如果版本满足条件,你接着需要检查venv是否可用

python -m venv --help
# 若显示帮助信息说明功能正常

2.1.2. 主要语法

创建环境:

当你想要为项目使用虚拟环境时,首先你需要创建一个虚拟环境

# 基础创建(推荐使用项目根目录)
python -m venv .venv

# 高级选项:
python -m venv .venv \
--prompt "MyProject" \    # 自定义终端提示符
--without-pip \          # 不安装pip(特殊场景使用)
--system-site-packages  # 继承全局包(慎用!)

如果你有多个 python 版本,也可以创建不同版本的虚拟环境

# 为不同Python版本创建环境
python3.10 -m venv .venv310
python3.11 -m venv .venv311

启用环境:

之后就是环境激活,不同操作系统的指令略有不同。

Windows系统:

.venv\Scripts\activate
# 激活后提示符变为 (.venv) PS C:\path>

macOS/Linux:

source .venv/bin/activate
# 激活后提示符变为 (.venv) user@host:~$

验证激活状态:

which python  # Linux/macOS系统
where python  # Windows系统
# 应显示虚拟环境路径下的python

退出环境:

deactivate

删除环境(谨慎操作):

# 直接删除环境目录即可
rm -rf .venv   # Linux/macOS
rd /s /q .venv # Windows

安装与管理依赖:

安装依赖就是正常的pip操作,值得一提的是你可以直接导出本项目需要的环境清单,方便他人安装对应的版本。

# 安装指定库  
pip install django==4.0  

# 导出依赖清单  
pip freeze > requirements.txt  

# 根据清单安装  
pip install -r requirements.txt  
2.1.3. 进阶操作

1. 专业开发目录规范:

/project_root  
  ├── .venv/          # 虚拟环境(不要提交到Git)  
  ├── src/            # 源代码  
  ├── tests/          # 单元测试  
  ├── docs/           # 文档  
  └── requirements/   # 分级依赖管理  
      ├── base.txt    # 核心依赖  
      ├── dev.txt     # 开发工具(pytest等)  
      └── prod.txt    # 生产环境专用

2. 依赖维护进阶技巧:

# 分层安装依赖  
pip install -r requirements/base.txt  

# 开发时额外安装  
pip install -r requirements/dev.txt  

# 导出精确依赖树  
pip freeze | grep -v "pkg-resources" > requirements.txt

3. 环境迁移:

# 快速复制环境(需安装pip-tools)  
pip-compile requirements.in > requirements.txt  
pip-sync requirements.txt

4.IDE 集成,PyCharm 配置:

  • 打开 File > Settings > Project: xxx
  • 点击设置 ⚙️ 图标选择 Add Interpreter(添加解释器)
  • 勾选 Existing environment (已存在的环境)并指向 .venv 目录

2.2. Virtualenv 详解

2.2.1. Virtualenv 是什么

Virtualenv 诞生于2007年,比Python自带的venv早了整整6年!它曾拯救无数开发者于"依赖地狱",至今仍在维护Python2项目的战场上发光发热。


2.2.2. 使用方式

我们用 virtualenv 来维护一个Python 2.7 项目进行示范:

# 1. 安装Virtualenv(全局安装)
pip install virtualenv

# 2. 创建Python 2.7环境
virtualenv --python=python2.7 legacy_env

# 3. 激活环境
# Linux/macOS
source legacy_env/bin/activate
# Windows
legacy_env\Scripts\activate

# 4. 验证版本
python --version  # 应显示 Python 2.7.x

# 5. 安装旧版依赖
pip install django==1.11

# 6. 导出依赖清单
pip freeze > requirements.txt

# 7. 退出环境
deactivate

有没有发现跟venv很像?

那么我们来对比一下二者:

对比维度

Virtualenv

venv

发布时间

2007年

2014年(Python 3.3引入)

Python版本支持

支持 Python 2.x 和 3.x 全系列

仅支持 Python 3.3+

安装方式

需额外安装:pip install virtualenv

Python 3.3+ 自带,无需安装

环境创建速度

较慢

较快

社区支持

活跃(仍在维护)

官方支持

典型使用场景

Python 2.x 项目、自定义环境需求

Python 3.3+ 新项目、标准环境需求


2.2.3. 进阶技巧

1. 环境迁移秘籍

# 创建可迁移环境
virtualenv --relocatable myenv

# 打包环境
tar czvf myenv.tar.gz myenv/

# 在新机器解压后直接使用

2. 多版本管理

# 同时管理多个Python版本
virtualenv --python=python3.6 py36_env
virtualenv --python=python3.10 py310_env

3. 结合 virtualenvwrapper

virtualenvwrapper是管理virtualenv的工具,它提供了更方便的方式来创建、切换、删除和管理虚拟环境。

# 安装增强工具
pip install virtualenvwrapper

# 常用命令
mkvirtualenv new_env    # 创建环境
workon                  # 列出所有环境
workon new_env          # 切换环境
rmvirtualenv old_env    # 删除环境

2.2.4. 什么时候选择 Virtualenv?

建议使用的场景:

✅ 维护 Python 2.x 历史项目
✅ 需要自定义解释器路径
✅ 环境需要迁移到不同机器
✅ 配合 virtualenvwrapper 使用

不建议使用场景
❌ 纯 Python 3.3+ 新项目(优先选venv)
❌ 需要非Python依赖(建议用conda)


2.3. Pipenv 详解

2.3.1. Pipenv 是什么?

聪明的小伙伴会发现,这个库的名字叫做pipenv,那么这个玩意是不是跟pip有关呢?恭喜你!答对了!Pipenv = pip + virtualenv 的增强版,它就是一个管理虚拟环境和依赖关系的集合体。

Pipenv 是一个 Python virtualenv 管理工具,它支持多种系统,能为你的项目自动创建、管理虚拟环境,同时,当你安装、卸载包时,它能自动在你的 Pipfile 中添加、删除记录。它还会为你生成一个相当重要的 Pipfile.lock 文件,用来产生一致性的构建。

特点:

  • 一键式环境管理
  • 自动创建/删除虚拟环境
  • 智能识别项目路径
  • 用易读的 Pipfile 替代 requirements.txt
  • 通过 Pipfile.lock 精确锁定依赖版本
  • 自动检查安全漏洞
  • 依赖哈希校验防篡改
2.3.2. 使用方式

1. 安装 Pipenv

# 全局安装
pip install pipenv

# 验证安装
pipenv --version  # 输出示例:pipenv, version 2023.10.3

2. 初始化项目环境

# 进入项目目录
cd myproject

# 初始化环境(自动创建虚拟环境)
pipenv install

3. 创建环境后会自动生成文件

Pipfile(TOML 格式)

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
requests = "*"
django = "==4.2"

[dev-packages]
pytest = "*"

[requires]
python_version = "3.10"

Pipfile.lock(JSON 格式)

  • 记录所有依赖的哈希值和版本

4. 管理依赖:

操作

命令

示例

安装生产依赖

pipenv install <package>

pipenv install requests

安装开发依赖

pipenv install --dev <package>

pipenv install --dev pytest

指定版本安装

pipenv install <package>==x.x.x

pipenv install django==4.2

卸载依赖

pipenv uninstall <package>

pipenv uninstall flask

更新所有依赖

pipenv update

更新单个依赖

pipenv update <package>

pipenv update numpy

5. 环境与依赖控制:

  • 进入虚拟环境
pipenv shell  # 激活环境
  • 直接运行命令(无需激活环境):
pipenv run python app.py
  • 查看依赖树
pipenv graph
# 输出示例:
# requests==2.31.0
#   - certifi [required: >=2017.4.17, installed: 2023.7.22]
#   - charset-normalizer [required: >=2,<4, installed: 3.3.2]
  • 锁定依赖版本
pipenv lock  # 生成/更新 Pipfile.lock

6. 配置与镜像加速

修改镜像源:

# 永久设置阿里云镜像
pipenv install --pypi-mirror https://mirrors.aliyun.com/pypi/simple/

环境变量管理:

# 在 .env 文件中定义变量
echo "API_KEY=12345" > .env
# Pipenv 会自动加载

2.3.3. 示例:开发一个 Web 项目
# 1. 创建项目
mkdir myweb && cd myweb

# 2. 初始化环境并安装依赖
pipenv install django==4.2
pipenv install --dev pytest

# 3. 激活环境
pipenv shell

# 4. 创建Django项目
django-admin startproject core .

# 5. 运行开发服务器
python manage.py runserver

# 6. 退出环境
exit

# 7. 导出 requirements.txt
pipenv lock -r > requirements.txt

2.3.4. 进阶技巧

1. 多阶段依赖安装

# 仅安装生产依赖(用于部署)
pipenv install --deploy --ignore-pipfile

2. 环境清理

pipenv clean  # 删除未在 Pipfile 中声明的包

3. 脚本自动化

# Pipfile 中添加
[scripts]
start = "python manage.py runserver"
test = "pytest tests/"
pipenv run start  # 运行自定义脚本

4. 环境可视化

# 查看依赖树
pipenv graph

# 检查漏洞
pipenv check

2.3.5. 什么时候选择 Pipenv?

建议使用的场景:

✅ Web 应用开发
✅ 需要严格版本锁定的项目
✅ 团队协作场景

不建议使用场景
❌ 超小型脚本(杀鸡用牛刀)
❌ 需要兼容 Python 2.x 的旧项目

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌小添

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值