Python模块运行报错:ModuleNotFoundError(__path__属性缺失)求助
报错原因分析
核心问题是你的code目录和Python标准库中的code模块重名了:
- 当你在
my_project目录下执行python -m code.my_code时,Python会优先搜索标准库自带的code模块,而非你项目里的code目录。 - 标准库的
code是单个文件模块,不是包(没有__path__属性),所以Python没法在它下面找到my_code子模块,直接抛出ModuleNotFoundError。
你回到上级目录执行python -m my_project.code.my_code能正常运行,是因为此时指定了完整的包路径my_project.code.my_code,Python会从当前目录(上级目录)找到my_project包,再定位到内部的code子包,不会和标准库的code混淆。
解决办法
方法1:重命名冲突目录(最推荐)
直接把项目里的code目录改成不会和标准库重名的名字,比如src或project_code:
- 重命名目录:
my_project/code→my_project/src my_code.py的导入语句不用改- 在
my_project目录下执行:
python -m src.my_code
方法2:用绝对导入+完整包路径运行
不修改目录名,调整导入语句后从上级目录运行:
- 修改
my_code.py的导入语句为绝对导入:
from my_project.functions.module1 import add_three
- 回到
my_project的上级目录,执行:
python -m my_project.code.my_code
方法3:使用相对导入(需标记目录为包)
给code和functions目录添加__init__.py,将它们标记为Python包,再用相对导入:
- 在
my_project/code和my_project/functions下分别创建空的__init__.py文件 - 修改
my_code.py的导入语句为相对导入:
from ..functions.module1 import add_three
- 回到
my_project的上级目录,执行:
python -m my_project.code.my_code
方法4:临时修改PYTHONPATH(适合临时测试)
在my_project目录下,先把上级目录加入PYTHONPATH,再运行模块:
- Windows命令行:
set PYTHONPATH=%cd%/.. python -m my_project.code.my_code
- Linux/macOS终端:
export PYTHONPATH=$(pwd)/.. python -m my_project.code.my_code
内容的提问来源于stack exchange,提问作者zest16
相关产品推荐
相关产品推荐

