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

使用Poetry的Python项目获取包版本遇PackageNotFoundError求助

问题原因及解决方案

问题出在importlib.metadata.version()的工作机制——它只会从已安装到Python环境中的包的元数据里读取版本号。你的项目目前仅存在本地目录,未以可编辑模式或正常模式安装到Poetry创建的虚拟环境中,因此importlib.metadata无法找到对应包的元数据,从而抛出PackageNotFoundError。

解决方案1:以开发模式安装项目

在项目根目录执行以下命令,将项目以可编辑模式安装到Poetry虚拟环境:

poetry install

或等价命令:

poetry add --editable .

安装完成后,importlib.metadata.version("gitdida")即可正确读取pyproject.toml中的版本号,测试可正常通过。

解决方案2:硬编码版本并同步(更稳定)

直接在src/gitdida/__init__.py中定义版本号:

__version__ = "0.2.0"

修改测试代码,直接导入该版本号进行断言:

from gitdida import __version__

def test_version():
    expected = "0.2.0"
    assert __version__ == expected

这种方式不依赖包的安装状态,稳定性更强。若担心手动同步pyproject.toml与__init__.py的版本号麻烦,可使用poetry-dynamic-versioning插件实现自动同步(需额外安装配置)。

解决方案3:通过Poetry命令获取版本(临时场景)

若仅需在测试或脚本中临时获取版本,可执行Poetry命令读取:

import subprocess

def get_poetry_version():
    result = subprocess.run(["poetry", "version", "--short"], capture_output=True, text=True)
    return result.stdout.strip()

def test_version():
    expected = "0.2.0"
    assert get_poetry_version() == expected

该方式依赖系统中Poetry的可用性,不如前两种方案可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:15