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

如何从Poetry管理的Python项目内部动态获取项目版本?

解决Poetry打包Python库的动态版本获取问题

方案一:兼容开发/部署环境的版本获取逻辑

这种方法优先从已安装包的元数据读取版本(和importlib.metadata.version('example_library')完全一致),开发环境下自动回退到读取项目根目录的pyproject.toml,无需依赖Poetry API,适配任意部署位置。

代码实现(example_library.py)

import importlib.metadata
from pathlib import Path
import tomllib  # Python 3.11+;若用Python 3.10及以下,需安装`toml`库并替换为import toml

def get_version():
    # 优先从已安装包的元数据获取版本(部署环境用)
    try:
        return importlib.metadata.version("example_library")
    except importlib.metadata.PackageNotFoundError:
        # 开发环境下,向上遍历目录找到pyproject.toml
        current_dir = Path(__file__).resolve().parent
        while current_dir != current_dir.parent:
            pyproject_path = current_dir / "pyproject.toml"
            if pyproject_path.exists():
                # 读取toml文件
                with open(pyproject_path, "rb") as f:
                    pyproject_data = tomllib.load(f)
                return pyproject_data["tool"]["poetry"]["version"]
            current_dir = current_dir.parent
        raise RuntimeError("无法在上级目录找到pyproject.toml文件")

def get_some_dict():
    return {
        "version": get_version(),
        # 可添加其他字段
    }

注意事项

  • 如果你的项目需要兼容Python 3.10及以下版本,需在开发依赖中添加toml库:
    [tool.poetry.dev-dependencies]
    toml = "^0.10.2"
    
    并将代码中的import tomllib替换为import toml,同时把tomllib.load(f)改为toml.load(f)。
  • 该逻辑会自动适配项目的任意目录结构,只要pyproject.toml位于项目根目录即可。

方案二:让Poetry自动生成版本文件(可选)

如果你希望完全通过Poetry的打包流程注入版本,可配置Poetry在打包时自动生成包含版本信息的文件:

1. 修改pyproject.toml

添加以下配置,让Poetry生成_version.py文件:

[tool.poetry]
name = "example_library"
version = "0.1.0"
# 其他原有配置...

[tool.poetry.build]
generate-setup-file = true

2. 在example_library.py中导入版本

from ._version import __version__ as get_version

def get_some_dict():
    return {
        "version": get_version(),
        # 其他字段
    }

注:_version.py会在执行poetry build或poetry install时自动生成,版本值与pyproject.toml一致,且和importlib.metadata.version('example_library')返回值完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:50:45