Python 包的依赖管理,有解了!
写 Python 的同学应该都懂那种“环境混乱到怀疑人生”的时刻:同一个项目换台机器跑不起来、依赖版本打架、pip list 多到像 txt 打开乱码…… 这些年各种工具也出来不少,virtualenv、pipenv、poetry、conda……但总有点“各有优缺点”的感觉。
这篇文章就想很轻松地聊聊:Python 依赖管理,怎么才能舒服地搞定?顺便用点简单代码,让整个流程一眼就懂。
为什么 Python 依赖会乱?
原因其实超级简单:
pip 默认不锁版本 requirements.txt 不包含依赖树 环境容易串(尤其多个项目共用同个 Python) 不同机器、不同时期安装,结果不一样
比如你有个项目写着:
Flask
requests
你以为这就够了吗?不不,Flask 就能拉下几十个依赖。 今天安装一次、下周安装一次,版本可能完全不一样。
无论你用什么工具,本质只有两件事:
把依赖和版本号锁死(lock file) 把项目隔离开(虚拟环境)
剩下的都是不同工具、不同体验。
工具对比(简单粗暴版)
下面直接给你几个主流方案的定位,一句话都能懂。
🥚 pip + venv(最原始但也最稳定)
好处:内置、简单、无脑 坏处:不锁依赖、依赖树不可控 适合:Demo、小脚本
🐍 pip-tools(pip 的“版本锁定加强包”)
好处:靠谱、兼容原生 pip 坏处:要多执行几条命令 适合:部署到服务器的项目、企业使用
🎩 Poetry(现代、优雅、全自动)
好处:依赖管理舒服、版本锁定好、环境创建自动 坏处:有时候和某些包冲突、行为“太智能” 适合:中大型项目、注重可复现环境
🐼 Conda(偏数据科学)
好处:管理系统依赖和 Python 包都强 坏处:慢、包大、不适合纯后端项目 适合:AI、数据分析、科学计算
想要一条建议:做 Web / 服务端 → Poetry 或 pip-tools做 AI / 数学 / 科学 → Conda
pip + venv:最基础版本(但依然实用)
初始化虚拟环境:
python3 -m venv venv
source venv/bin/activate
安装依赖并导出:
pip install flask requests
pip freeze > requirements.txt
但是最大的问题: requirements.txt 不是你维护的,而是“所有包全部列出来”。版本冲突、多平台安装不一致的问题都可能出现。
pip-tools:pip 的“高配版”
这是我最推荐的“企业级方案”。
Step 1:写明确的依赖
新建个文件叫 requirements.in:
Flask==3.*
requests>=2.31
Step 2:生成锁文件
pip install pip-tools
pip-compile requirements.in
生成一个 requirements.txt(锁死所有依赖树)。
Step 3:安装
pip install -r requirements.txt
你会得到可复现、可部署、无惊喜的依赖环境,非常稳。
Poetry:最舒服但偶尔傲娇
基本流程:
pip install poetry
poetry init
poetry add flask
poetry add requests
它会自动生成:
pyproject.toml(声明依赖)poetry.lock(锁定依赖版本)
并且自动创建虚拟环境。
启动环境:
poetry shell
运行脚本:
poetry run python app.py
真的非常优雅,特别适合多人协作和中大型项目。
示例:一个完整可复现的项目
项目结构:
project/
├── pyproject.toml
├── poetry.lock
└── app.py
app.py:
from flask import Flask
import requestsapp = Flask(__name__)
@app.route("/")
defhello():
r = requests.get("https://httpbin.org/ip")
return {"msg": "hello", "ip": r.json()["origin"]}
if __name__ == "__main__":
app.run(port=5000)
安装依赖:
poetry install
poetry run python app.py
换台电脑、换个系统、换一年之后,只要有 lock 文件,依然能跑。
这就是依赖管理真正的价值。
最后:哪种方案最好?
一句话总结:
如果你想“稳得像 Docker 构建一样”,选 pip-tools如果你想“写 Python 写得最舒服”,选 Poetry如果你在搞 AI 或数据,选 Conda如果你只写脚本,选 pip + venv
我的个人常用组合:
后端项目:pip-tools 自己玩项目:Poetry AI、ML:Conda + pip
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB