Python项目导入classes模块触发ModuleNotFoundError的问题咨询
解决Python模块导入错误:ModuleNotFoundError: No module named 'classes'
项目结构
classes/ ├─ __init__.py ├─ card.py ├─ find.py ├─ player.py ├─ table.py .gitignore main.py
当前__init__.py内容
from .card import * from .player import * from .table import *
出错的导入代码(table.py中)
from classes import Player from classes import Card, CardType, CardValue, HandValue
错误信息
Traceback (most recent call last): File "/home/adrian/Desktop/Programozas/Poker/classes/table.py", line 1, in <module> from classes import Player ModuleNotFoundError: No module named 'classes'
解决方法
方法一:使用相对导入(推荐)
table.py和player.py、card.py同属classes包,直接用相对路径导入即可:
# 修改table.py中的导入代码 from .player import Player from .card import Card, CardType, CardValue, HandValue
方法二:使用绝对导入
确保项目根目录(即包含classes文件夹和main.py的目录)在Python的模块搜索路径中:
- 从项目根目录运行程序,比如在
/home/adrian/Desktop/Programozas/Poker/目录下执行:python main.py - 然后在
table.py中使用绝对导入:from classes.player import Player from classes.card import Card, CardType, CardValue, HandValue
方法三:临时添加根目录到搜索路径(不推荐)
如果无法从根目录启动程序,可以在table.py开头添加代码,手动将项目根目录加入Python的模块搜索路径:
import sys import os # 获取当前文件的上层目录(项目根目录)并加入搜索路径 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from classes.player import Player from classes.card import Card, CardType, CardValue, HandValue
原因说明
table.py本身位于classes文件夹内,Python默认的模块搜索路径不包含该文件夹的上层目录,因此直接用from classes import ...会找不到模块。相对导入适用于同包内的模块引用,绝对导入则需要确保上层目录被Python识别为模块搜索路径的一部分。
内容的提问来源于stack exchange,提问作者AdriaNn01
相关产品推荐
相关产品推荐

