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

自定义Python包ReunionLog调用时出现属性/模块找不到错误求助

解决自定义Python包ReunionLog的导入与属性访问错误

问题现象

开发的自定义Python包ReunionLog可成功构建并安装,但在Main.py中调用时出现两类错误:

  • 执行import ReunionLog as RL后调用RL.Get_Data_Name(),触发AttributeError: module 'ReunionLog' has no attribute 'Get_Data_Name'
  • 直接导入子模块(如from ReunionLog import Report)时触发ModuleNotFoundError: No module named 'ReportAbilities'

错误原因分析

  1. 属性访问错误:根包的__init__.py未将目标函数导出到根命名空间,或目录层级导致函数未被正确关联到根包
  2. 子模块找不到错误:子模块内部使用了错误的绝对导入路径,或setup.cfg未正确声明子包结构

解决方案

1. 修正目录层级

调整为标准Python包结构,确保根包与项目目录区分:

ReunionLog/
├── ReunionLog/
│   ├── __init__.py
│   ├── Report/
│   │   ├── __init__.py
│   │   └── ReportAbilities.py
│   └── OAuth/
│       ├── __init__.py
│       └── OAuthHandler.py
├── setup.cfg
└── setup.py

2. 配置根包__init__.py

在根包的__init__.py中显式导出需要直接访问的函数和子包,确保RL.Get_Data_Name()可被调用:

# ReunionLog/ReunionLog/__init__.py
from .Report.ReportAbilities import Get_Data_Name
from . import Report, OAuth

__all__ = ["Get_Data_Name", "Report", "OAuth"]

3. 修正子模块内部导入路径

子模块内部避免使用绝对导入,改用相对导入:

# 错误示例(绝对导入)
import ReportAbilities
# 正确示例(相对导入)
from . import ReportAbilities

# 跨子包导入的正确写法
from ..OAuth import OAuthHandler

4. 更新setup.cfg配置

确保配置文件正确识别所有子包:

[metadata]
name = ReunionLog
version = 0.1.0

[options]
packages = find:
python_requires = >=3.8

[options.packages.find]
where = ReunionLog

验证步骤

重新构建并安装包:

pip install -e .

在Main.py中测试:

import ReunionLog as RL
print(RL.Get_Data_Name())  # 正常执行
from ReunionLog.Report import ReportAbilities  # 无模块找不到错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:25:35