You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python代码中从pyproject.toml获取应用版本并实现/version路由

实现Flask API的/version路由返回应用版本

先搞懂你疑惑的__package__

你看到的示例里的__package__是Python内置变量,指当前代码所在的包名,但你的项目结构里wsgi.py是根目录的主文件,直接用它会报错——你需要把它替换成pyproject.toml里[tool.poetry]下的name字段值,比如你的pyproject.toml写的是name = "my-flask-api",就改成importlib.metadata.version("my-flask-api")。

具体实现步骤

1. 确认pyproject.toml里的配置

打开你的pyproject.toml,找到[tool.poetry]区块,记下name和version:

[tool.poetry]
name = "your-api-project-name"  # 这是你要填入importlib的包名
version = "0.1.0"               # 最终要返回的版本号

2. 修改wsgi.py添加路由

直接在wsgi.py里写以下代码(或整合进你原有代码):

from flask import Flask
import importlib.metadata

app = Flask(__name__)

# 获取版本号的逻辑
try:
    # 优先从已安装的包元数据读取(生产环境用poetry install后生效)
    app_version = importlib.metadata.version("your-api-project-name")
except importlib.metadata.PackageNotFoundError:
    # 本地开发时,若包未安装,直接读取pyproject.toml文件
    import tomllib
    with open("pyproject.toml", "rb") as f:
        pyproject_content = tomllib.load(f)
    app_version = pyproject_content["tool.poetry"]["version"]

# 添加/version路由
@app.route("/version")
def return_version():
    return {"version": app_version}

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

3. 测试路由

启动服务后,访问http://localhost:5000/version,就能看到返回的JSON:

{"version": "0.1.0"}

补充说明

  • 用importlib.metadata.version是标准做法,适合生产环境,因为Poetry安装包时会把版本信息写入环境的包元数据。
  • 加上异常处理是为了兼容本地开发场景——如果你没执行poetry install直接运行wsgi.py,也能从pyproject.toml里读到版本号。

内容的提问来源于stack exchange,提问作者pgossa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:15:36