自定义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'
错误原因分析
- 属性访问错误:根包的
__init__.py未将目标函数导出到根命名空间,或目录层级导致函数未被正确关联到根包 - 子模块找不到错误:子模块内部使用了错误的绝对导入路径,或
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
相关产品推荐
相关产品推荐

