Python 入门:用 venv 和 pip 把项目依赖管得明明白白
刚学 Python 的人,几乎都会遇到同一个尴尬:跟着教程装了一个库,换个项目又报错;明明昨天还能跑的代码,今天提示找不到模块。问题大多不在代码本身,而在环境——你一直在用全局环境装包,不同项目互相干扰。今天这篇文章,就把 Python 的虚拟环境 venv 和包管理工具 pip 一次讲清楚。
为什么需要虚拟环境
Python 装包默认进全局环境。项目 A 需要 requests 2.28,项目 B 需要 requests 2.32,两个版本装在同一个环境里只能留一个,另一个项目迟早报错。更糟的是,系统里别的 Python 工具也可能依赖这些库,一次升级可能牵连一大片。
虚拟环境就是给每个项目一个独立的“小房间”:解释器、安装的第三方库、执行路径都互相隔离。项目 A 用自己的 requests 2.28,项目 B 用自己的 2.32,互不打扰。删项目时连同环境一起删掉,不留垃圾。
三步创建你的第一个虚拟环境
假设项目目录是 myproject,先进入目录,再执行:
python -m venv .venv
这会在项目下生成一个 .venv 文件夹,里面是一份独立的 Python 环境。注意:.venv 要加进 .gitignore,不要提交到代码仓库。
第二步是激活。Windows 上执行 .venv\Scripts\activate,macOS 和 Linux 上执行 source .venv/bin/activate。激活成功后,命令行前面会出现 (.venv) 前缀,这就是环境已生效的标志。
第三步,确认当前用的真是虚拟环境的 Python:
python --version
pip --version
看 pip 的路径是否指向项目下的 .venv 目录。如果路径还是全局的,说明没有激活成功,先别急着装包。
pip 的日常用法
激活环境后,装包就用 pip:
pip install requests
pip install requests==2.32.3
不写版本号装最新版,写 == 可以锁定版本。查看已装的包用 pip list,卸载用 pip uninstall requests。升级 pip 自身用 python -m pip install --upgrade pip,新环境第一件事建议先做这一步。
很多人装包慢,是因为默认源在境外。临时换源可以在命令后加 -i https://pypi.tuna.tsinghua.edu.cn/simple,长期使用可以写进 pip 的配置文件,一劳永逸。
用 requirements.txt 固化依赖
项目做完要交给同事或者部署到服务器,别人怎么知道要装哪些库?答案是 requirements.txt:
pip freeze > requirements.txt
这个文件记录了当前环境里所有包和精确版本号。新环境里只需要一条命令就能完整还原:
pip install -r requirements.txt
养成习惯:每次增删依赖后重新生成一次 requirements.txt。需要注意的是,pip freeze 会把所有包都列出来,包括间接依赖,文件稍长是正常的。
新手最容易踩的五个坑
第一,忘记激活环境就装包,结果装进了全局环境,项目运行时却找不到。第二,激活了一个环境的终端,又在另一个终端里运行代码,环境根本没生效。第三,把 .venv 提交进了 Git,仓库变得巨大无比。第四,多个项目共用一个环境,迟早出现版本冲突。第五,报错 ModuleNotFoundError 时第一反应是重装 Python,其实多数时候只是用错了解释器。
遇到“找不到模块”时,先做三件事:确认终端提示符前有没有 (.venv),用 which python(Windows 用 where python)确认解释器路径,再用 pip list 确认包确实装在这个环境里。九成问题到这一步就定位了。
一个推荐的工作流
新建项目时,按这个顺序走就不会乱:创建项目目录、执行 python -m venv .venv、激活环境、升级 pip、安装依赖、生成 requirements.txt、把 .venv 写进 .gitignore。以后每次打开项目,先激活环境再工作,退出时执行 deactivate 即可。
虚拟环境不是什么高深技术,它只是把“我的项目用什么库、什么版本”这件事变得明确、可重复。当你开始用它管理依赖,换电脑、换同事、部署上线都会顺畅很多。从今天起,给每个新项目都建一个属于它自己的虚拟环境吧。
- 点赞
- 收藏
- 关注作者
评论(0)