如何在Python Typer程序中获取pyproject.toml指定的version版本号?
从pyproject.toml引入版本号到Python/Typer程序(Poetry构建)
这里有几种简便的实现方式:
方法1:直接读取pyproject.toml文件
这是最通用的方式,适配开发和生产环境。Python 3.11+自带tomllib模块,3.10及以下版本可通过pip install tomli安装兼容模块。
在你的包的__init__.py(比如cat_cli/__init__.py)中添加以下代码:
# 适配Python版本 try: import tomllib except ImportError: import tomli as tomllib def _get_version(): with open("pyproject.toml", "rb") as f: config = tomllib.load(f) return config["tool"]["poetry"]["version"] __version__ = _get_version()
之后在Typer命令中就可以直接引用这个版本变量:
import typer from cat_cli import __version__ app = typer.Typer() @app.command() def version(): typer.echo(f"cat-cli v{__version__}")
方法2:读取Poetry自动设置的环境变量
当你用poetry run或poetry shell启动程序时,Poetry会自动设置POETRY_PROJECT_VERSION环境变量,直接读取即可:
import os __version__ = os.getenv("POETRY_PROJECT_VERSION", "unknown")
这种方式无需读取文件,但只有通过Poetry的命令启动程序时才能获取到正确版本,适合生产环境用Poetry部署的场景。
内容的提问来源于stack exchange,提问作者Arkady Sharkansky
相关产品推荐
相关产品推荐

