侧边栏壁纸
博主头像
前端学习

行动起来,活在当下

  • 累计撰写 316 篇文章
  • 累计创建 18 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Poetry 管理 Python 项目:从 requirements.txt 切到 pyproject.toml

Administrator
2026-06-19 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

一、为什么要接入 Poetry

很多 Python 工程一开始通过 requirements.txt 管理依赖。随着接口、报表、脚本命令、导出工具逐渐增多,继续手动维护 requirements.txt 会越来越散。

Poetry 的好处是把项目配置、Python 版本约束、依赖列表和锁定文件统一收口到 pyproject.tomlpoetry.lock。这样启动、安装和迁移环境都会更清晰。

二、Poetry 管理的内容

Poetry 管理的不只是依赖,还包括完整项目信息:

  1. 项目元数据

  2. Python 版本限制

  3. 依赖声明

  4. 锁定后的精确版本

  5. 统一的运行命令入口

也就是说,requirements.txt 更像是一份安装清单,而 pyproject.toml 更像是一份完整配置文件。

三、常见 pyproject.toml 结构

一个常见的 Poetry 配置可以写成这样:

[project]
name = "demo-app"
version = "0.1.0"
description = "Python demo application"
readme = "README.md"
requires-python = ">=3.11,<4.0"
dependencies = [
    "pandas==2.2.2",
    "matplotlib==3.9.2",
    "openpyxl==3.1.5",
    "fastapi>=0.115.0,<1.0.0",
    "uvicorn[standard]>=0.30.0,<1.0.0",
]

[tool.poetry]
package-mode = false

如果当前更偏向脚本工程、练习工程或者内部工具,而不是需要发布到 PyPI 的库,那么 package-mode = false 会更合适。

四、poetry.lock 有什么用

poetry.lock 用来锁定最终解析出来的依赖版本。

比如声明了 fastapiuvicorn,Poetry 在解析时还会带出 starlettepydantic 以及其它间接依赖。poetry.lock 会把这些版本固定下来。

这样做的价值是:

  1. 不同机器安装出来的环境更一致

  2. 今天能跑的工程,明天重装环境时更容易复现

  3. 出问题时更容易定位是代码问题还是依赖漂移问题

五、接入 Poetry 后怎么用

常用命令如下:

poetry install
poetry run python -m your_module
poetry run python your_script.py
poetry run uvicorn api:app --reload --port 8010

这样之后,不需要再手动激活不同虚拟环境,也不需要混用 pip install 和本地 Python。命令入口会统一很多。

六、为什么接口依赖也要放进 Poetry

如果一个工程里已经有接口层,就不应该只把数据分析类依赖写进配置,而把 FastAPIuvicorn 之类的运行依赖放在外面单独装。

更稳妥的方式是把运行时真正需要的依赖全部写进 pyproject.toml。这样后面别人接手时,执行 poetry install 就能得到完整环境。

七、README 也要一起更新

接入 Poetry 之后,README 里的命令最好一起切换。

例如原来常见的是:

python -m venv .venv
pip install -r requirements.txt

切换之后更适合写成:

poetry install
poetry run python -m your_module
poetry run uvicorn api:app --reload

这样文档和配置保持一致,后面照着 README 跑也不会走偏。

八、端口与启动命令

启动 FastAPI 时,如果直接使用 8000 端口,有时会遇到端口占用或者系统策略拦截。

因此实际使用时,可以直接指定一个可用端口:

poetry run uvicorn api:app --reload --port 8010

九、接入 Poetry 带来的变化

  1. 依赖不再分散在命令和 requirements.txt

  2. Python 版本约束写进了项目配置

  3. 接口、报表、导出相关依赖可以统一纳管

  4. 工程可以通过 poetry run 统一启动

  5. 后续继续扩展脚本、接口和工具时更容易维护

Tips

如果是脚本型工程,可以优先考虑:

[tool.poetry]
package-mode = false

如果工程里已经开始出现 API、报表、数据初始化脚本并存的情况,Poetry 往往会比单独维护 requirements.txt 更省心。

如果后续要继续扩展测试、格式化或类型检查工具,也建议继续放进 pyproject.toml 统一管理。

0

评论区