Python技术迷

Python 包的依赖管理,有解了!

写 Python 的同学应该都懂那种“环境混乱到怀疑人生”的时刻:同一个项目换台机器跑不起来、依赖版本打架、pip list 多到像 txt 打开乱码…… 这些年各种工具也出来不少,virtualenv、pipenv、poetry、conda……但总有点“各有优缺点”的感觉。

这篇文章就想很轻松地聊聊:Python 依赖管理,怎么才能舒服地搞定?顺便用点简单代码,让整个流程一眼就懂。

为什么 Python 依赖会乱?

原因其实超级简单:

  • pip 默认不锁版本
  • requirements.txt 不包含依赖树
  • 环境容易串(尤其多个项目共用同个 Python)
  • 不同机器、不同时期安装,结果不一样

比如你有个项目写着:

Flask
requests

你以为这就够了吗?不不,Flask 就能拉下几十个依赖。 今天安装一次、下周安装一次,版本可能完全不一样。

无论你用什么工具,本质只有两件事:

  1. 把依赖和版本号锁死(lock file)
  2. 把项目隔离开(虚拟环境)

剩下的都是不同工具、不同体验。

工具对比(简单粗暴版)

下面直接给你几个主流方案的定位,一句话都能懂。

🥚 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 requests

app = 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