【Python项目实战】虚拟环境与依赖管理:venv / pip / requirements.txt实操

pip install 成功了,import 却报错。

现在彻底根治它 ,顺便解决另一个世纪难题------项目换台电脑就跑不起来


📌 太长不看版(给想快速上手的你)

你要解决的问题 一句话解法
多个项目包版本冲突 每个项目建一个虚拟环境(venv),隔离互不影响
装包成功却无法import pip装进了"别的"Python,用 python -m pip install 指定当前环境
项目换电脑跑不起来 pip freeze > requirements.txt 导出清单,新机器 pip install -r requirements.txt
pip下载太慢 换国内镜像源(清华/阿里),秒级加速
要不要学uv 先把venv/pip这套通用语言用熟,再切不迟

一、先看三场"人间惨案"(你大概率遇到过)

😱 惨案一:装了,但没完全装

pip install requests 提示成功,一运行还是 ModuleNotFoundError

真相 :你机器上有好几个Python,pip把包装进了你没在用的那个

😱 惨案二:升级一个包,搞坏了两个项目

项目A需要 requests==2.32,项目B依赖 requests==2.28。所有包都堆在同一个"全局"抽屉里,升级A的那一刻,B默默坏了。

😱 惨案三:换台电脑,项目报废

代码拷过去了,一跑全是 ModuleNotFoundError------你根本记不清装过哪些包、什么版本。


三个惨案指向同一个病根:所有项目的包共用一个公共抽屉。

解法就是给每个项目一间独立房间------虚拟环境(Virtual Environment)。


二、venv实操:给项目一间独立的房间

venv是Python官方自带 的虚拟环境工具,不用装任何东西

原理一句话:它把解释器和包安装目录单独复制一份放进项目文件夹,从此这个项目装什么、装哪个版本,都不影响别人

标准四步(核心中的核心)

先在终端里 cd 到你的项目根目录,然后对照下表执行:

步骤 Windows(cmd) Windows(PowerShell) macOS / Linux
① 创建 python -m venv venv python -m venv venv python3 -m venv venv
② 激活 venv\Scripts\activate .\venv\Scripts\Activate.ps1 source venv/bin/activate
③ 使用 激活后正常 pip install、跑代码 同左 同左
④ 退出 deactivate deactivate deactivate

💡 "多版本共存"在这里用上了:py -3.13 -m venv venv 可以指定用哪个版本建房间。


✅ 激活成功的唯一标志

命令行提示符最前面多出 (venv) 前缀 👇

text 复制代码
# 激活前
C:\myproject>

# 激活后
(venv) C:\myproject>

看到 (venv),说明你已经"进入房间"了。没看到?回到报错①自查。


验证:亲眼看 pip "搬家"

需要你留意 pip --version 末尾的 (python 3.13),现在揭晓用处------激活前后各敲一次

text 复制代码
# 激活前:pip 属于全局
pip --version
# pip 25.x from C:\...\Python313\Lib\site-packages\pip (python 3.13)

# 激活后:pip 搬进了项目文件夹
pip --version
# pip 25.x from D:\myproject\venv\Lib\site-packages\pip (python 3.13)

🎯 路径从全局目录变成了项目里的 venv 目录------pip已经搬进这个房间,接下来它装的一切都只属于这个项目。惨案一、二的解药,就是这一行路径的变化。


🔌 接回编辑器(重要!)

新建了venv,VSCode不会自动切换过去

  1. Ctrl+Shift+PPython: Select Interpreter
  2. 这次要选带 venv 路径的那一个venv\Scripts\python.exe./venv/bin/python
  3. 选完右下角状态栏会显示 ('venv': venv)

💡 PyCharm新建项目时默认就会创建并使用venv,所以它开箱即用,不用手动配。


三、pip必会操作 + 国内镜像源加速

五个高频命令(背下来)

bash 复制代码
pip install requests              # 安装最新版
pip install requests==2.31.0      # 安装指定版本
pip list                          # 查看当前环境装了什么包
pip show requests                 # 查看某个包的版本、依赖、安装位置
pip uninstall requests            # 卸载

🚀 国内镜像源:把"龟速"调成"秒装"

pip默认从国外服务器下载,慢和超时不是你网速差,是路太远。国内镜像源 = 官方仓库的国内同步副本,内容一样,速度不是一个量级。

临时使用(只对本次安装生效):

bash 复制代码
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

一劳永逸(写入配置,以后默认走清华源):

bash 复制代码
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

✅ 执行完没有任何仪式感,但下次 pip install 直接起飞🚀

🔄 清华源偶发抽风时可换阿里源:https://mirrors.aliyun.com/pypi/simple/


四、requirements.txt:环境的"存档"与"读档"

虚拟环境解决"打架"问题,requirements.txt解决"搬家"问题------它是一个纯文本清单,记着房间里所有包和精确版本

💾 存档(导出清单)

bash 复制代码
pip freeze > requirements.txt

打开看看,长这样:

text 复制代码
requests==2.32.3
charset-normalizer==3.3.2
idna==3.7
urllib3==2.2.0
certifi==2024.8.30

📂 读档(一键复现)

换电脑、发同学、部署服务器,通用三步

bash 复制代码
python -m venv venv                 # ① 建新房间
# Windows: venv\Scripts\activate    # ② 激活
# Mac: source venv/bin/activate     # ② 激活
pip install -r requirements.txt     # ③ 按清单一键装齐

📌 从此的标准工作流

新项目 = 建venv → pip装包 → freeze > requirements.txt

项目换机器只需要两样东西:代码 + requirements.txt

venv文件夹本身从不搬家(为什么,见报错⑤)。

两个黄金习惯

  • ✅ 项目根目录永远放一个 requirements.txt,别人拿到项目第一反应就是找它;
  • ✅ 每次装了新包,随手重新 pip freeze > requirements.txt------存档要存最新的。

五、uv 最小上手:新一代工具,4条命令同款流程

第2篇预告过它:uv是社区这两年最火的新一代工具,Rust编写,安装、下载全并行,速度比pip快一个数量级,一个工具顶 venv + pip 两件套。

bash 复制代码
pip install uv                      # 安装 uv 本体
uv venv                             # 建环境(默认文件夹名 .venv)
uv pip install requests             # 秒级装包
uv pip freeze > requirements.txt    # 导出清单,与pip时代完全通用

激活、运行和venv一模一样(.venv\Scripts\activate),你已经学会的东西全部不作废

🤔 现在就换吗?

我的建议:先把 venv/pip 这套"通用语言"用熟。

它是全网教程、报错帖、公司项目的公共基准,遇到问题到处有答案;uv是高效的"方言",适合你已经吃透虚拟环境原理之后再切换。

后面偶尔会用uv演示,两条路线都会标注清楚。


六、常见报错:这6个,都在今天的射程内(重点!)

① PowerShell激活报错"在此系统上禁止运行脚本"(Windows最高发)

现象 :执行 .\venv\Scripts\Activate.ps1,红字 ...cannot be loaded because running scripts is disabled...

🔍 原因:PowerShell默认禁止运行脚本。

✅ 解法 :打开PowerShell(不需要管理员),执行:

powershell 复制代码
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

输入 Y 确认,重开终端再激活即可。

💡 这条命令只放开"本地脚本"的运行权限、只影响当前用户,放心执行。


② 激活了,(venv) 却没出现 / pip还是全局的

🔍 原因:不在项目根目录执行的激活命令,或者终端窗口开错了。

✅ 解法:三步自查------

  1. 看提示符最前面有没有 (venv)
  2. where pip(Mac:which pip)看路径指向哪;
  3. 拿不准就直接用 python -m pip install 包名------跟着当前python走,永远不迷路。

③ 下载龟速,最后 ReadTimeoutError

🔍 原因:默认国外源,路远易超时。

✅ 解法 :第三节镜像源。装到一半断掉不用慌,重跑一遍 pip install 即可,已下载的部分不浪费。


ERROR: Could not find a version that satisfies the requirement xxx

🔍 原因一 :包名拼错了------比如装 opencv 找不到,其实包名叫 opencv-python

🔍 原因二:这个包的新版本不支持你的Python版本。

✅ 解法

  1. 先去 https://pypi.org 搜包名核对;
  2. 再考虑换/升Python版本------这就用上了第2篇的多版本共存。

⑤ 能不能把venv文件夹拷给同学 / 拷到自己另一台电脑?

❌ 不能。 venv内部记录的路径是写死的,换台机器轻则失灵重则报错,而且它动辄几十上百MB。

✅ 正道:只拷"代码 + requirements.txt",让新机器按第四节三步重建。

📌 venv是一次性的,清单才是永恒的。


⑥ 装了包,import 还是 ModuleNotFoundError ------ 终极排查三连

遇到这个问题,按顺序查,别瞎折腾:

步骤 检查什么 怎么查
虚拟环境激活了吗? 看命令行前缀有没有 (venv)
包真的在当前环境吗? python -m pip list 确认包在列表里
编辑器指向这个venv吗? 看VSCode右下角状态栏,或 Python: Select Interpreter

三步走完,本篇惨案一正式结案 🎉


七、课后练习

  1. 给任意一个旧项目建venv ,激活后 pip list 截图打卡------看看"空房间"里默认住着谁;

  2. 完整体验存档/读档

    • requests(记得用镜像源),pip freeze > requirements.txt
    • 删掉整个venv文件夹
    • 按"读档三步"重建
    • 成功 import requests

    💡 做完这一条,换电脑恐惧症当场痊愈!

  3. (选做)uv 把练习2重跑一遍,汇报你的速度对比。

相关推荐
神威难绷泪12 分钟前
Linux应用软件编程:线程分离属性 互斥机制 同步机制 死锁
linux·开发语言·算法·线程
研☆香36 分钟前
数组方法 splice讲解 拓展
开发语言·前端·javascript
梯度下降者1 小时前
CukeTest 自动化测试工具2023年度回顾白皮书
自动化测试·python·cuketest·qtquick/qml·linuxatk
峥嵘life1 小时前
Android16 系统 APEX 模块说明
android·大数据·开发语言
2601_962071571 小时前
数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
java·开发语言·数据库
————A1 小时前
Agent 文件处理中间件
开发语言·javascript·ecmascript
梦想的旅途21 小时前
如何高效调用企业微信通讯录API管理组织架构
java·开发语言·企业微信
circuitsosk1 小时前
从零搭建行业知识平台:向量库+图数据库+传统关系库的多模检索统一层设计
数据库·python·oracle·向量数据库·rag·多模检索
whcyhhh1 小时前
头歌实践教学平台:大数据存储2023(十三3)
大数据·开发语言·python