开发时如何从pyproject.toml嵌入版本到Python包并解决测试报错
开发环境下解决importlib_metadata版本读取报错的方案
方案1:通过Poetry以可编辑模式安装包
- 执行以下命令,将本地包以可编辑方式安装到当前环境,让importlib_metadata能读取到包的元数据:
该命令会自动处理项目依赖,同时把你的包链接到环境中,单元测试时就不会触发poetry installPackageNotFoundError。
方案2:直接从pyproject.toml读取版本号
跳过importlib_metadata,直接解析本地配置文件获取版本:
from pathlib import Path import tomllib # Python 3.11+ 可用,旧版本需安装tomli库 def get_version(): pyproject_path = Path(__file__).parent.parent / "pyproject.toml" with open(pyproject_path, "rb") as f: pyproject_data = tomllib.load(f) return pyproject_data["tool.poetry"]["version"] __version__ = get_version()
这种方式无需安装包,直接读取本地文件,适合开发环境快速解决问题。
方案3:添加兼容开发/生产的降级逻辑
保留生产环境的元数据读取方式,开发环境降级读取配置文件:
try: import importlib_metadata __version__ = importlib_metadata.version("package_name") except importlib_metadata.PackageNotFoundError: from pathlib import Path import tomllib pyproject_path = Path(__file__).parent.parent / "pyproject.toml" with open(pyproject_path, "rb") as f: pyproject_data = tomllib.load(f) __version__ = pyproject_data["tool.poetry"]["version"]
该方案兼顾生产环境的标准流程和开发环境的便捷性。
内容的提问来源于stack exchange,提问作者Tekay37
相关产品推荐
相关产品推荐

