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

如何在未安装的Python模块中读取版本字符串

未安装模块时获取同目录__init__.py中的版本号

针对你遇到的未安装模块、无法从同目录__init__.py获取版本号的问题,这里提供两种可行方案:

方案一:相对导入

在src/acme.py中直接使用相对导入语句:

# src/acme.py
from . import version

print(version)  # 输出0.0.7

注意:如果直接运行python src/acme.py会触发相对导入错误,此时需要以模块方式运行脚本,在项目根目录(src的上级目录)执行:

python -m src.acme

方案二:直接读取文件解析

如果不想受运行方式限制,可直接读取__init__.py文件内容,用正则提取版本号:

# src/acme.py
import re

def get_project_version():
    # 打开同目录下的__init__.py
    with open(__file__.replace('acme.py', '__init__.py'), 'r', encoding='utf-8') as f:
        file_content = f.read()
    # 匹配version = 'x.x.x'格式的字符串
    version_match = re.search(r"version\s*=\s*'([^']+)'", file_content)
    if version_match:
        return version_match.group(1)
    raise RuntimeError("未在__init__.py中找到版本号定义")

# 获取版本号并使用
current_version = get_project_version()
print(current_version)

这种方法不依赖Python的导入机制,无论以哪种方式运行acme.py都能正常获取版本号,适合未安装模块的场景。

为什么常规导入方法失败

常规的from src import version或import src要求src所在目录在Python的sys.path中,且模块已被识别。但未安装模块时,若直接运行src/acme.py,Python会将src目录加入sys.path,此时src本身不再是可导入的模块,导致导入失败;若从项目根目录运行,sys.path默认包含根目录,这时候import src是可行的,但很多场景下开发者习惯直接运行脚本,就会出现问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:52:03