Python导入自定义模块失败求助:多层模块调用无法执行
问题分析与解决方案
核心问题
你试图用Activities.play.football.mcball()这种嵌套层级调用,但实际把Activities、play、football都做成了同级的.py文件——Python的模块调用层级是包(文件夹)→ 模块(.py文件)→ 函数/类,同级文件无法通过链式点调用。另外注意Python是大小写敏感的,如果你的文件名是Play.py、Football.py,代码里的小写play、football会直接找不到模块。
解决方案
方案1:规范包结构(推荐)
按你想要的层级建立嵌套包结构,每个文件夹下必须创建__init__.py文件(可以是空文件,用于标记该文件夹为Python包):
项目根目录/ Activities/ # 根包文件夹 __init__.py play/ # 子包文件夹 __init__.py football.py # 存放mcball函数的模块
在football.py中定义函数:
def mcball(): # 函数逻辑 pass
之后可以用以下方式调用:
- 完整路径导入调用:
import Activities.play.football Activities.play.football.mcball() - 直接导入函数:
from Activities.play.football import mcball mcball() - 导入子模块调用:
from Activities.play import football football.mcball()
方案2:同级文件直接调用(不调整目录)
如果不想改动目录结构,三个.py文件都放在同一文件夹下,直接导入目标模块即可:
# 方式1:直接导入函数 from football import mcball mcball() # 方式2:导入整个模块 import football football.mcball()
额外注意事项
- 确保运行脚本的目录和模块所在目录一致,或者把模块目录添加到Python的
sys.path中(可在代码开头添加:import sys; sys.path.append("模块所在目录的绝对路径")) - 严格匹配文件名和代码中的模块名大小写,比如文件名是
Football.py,代码里必须写Football而不是football
内容的提问来源于stack exchange,提问作者Neoro
相关产品推荐
相关产品推荐

