使用CoveragePY测试Python游戏时出现ModuleNotFoundError(找不到model模块)
解决CoveragePY运行时
ModuleNotFoundError: No module named 'model'的问题 方案1:临时设置PYTHONPATH(快速解决)
在tests目录的终端中,根据操作系统执行对应命令:
- Linux/macOS:
PYTHONPATH=.. coverage run test_game_data.py - Windows(cmd):
set PYTHONPATH=.. && coverage run test_game_data.py - Windows(PowerShell):
$env:PYTHONPATH=".."; coverage run test_game_data.py
原理是把上层的Game目录加入Python的模块搜索路径,让Python能找到model包。
方案2:在测试文件中手动添加路径(无需每次设置环境变量)
在test_game_data.py的最顶部添加以下代码:
import sys from pathlib import Path # 获取当前测试文件的父目录的父目录(即Game根目录),加入模块搜索路径 sys.path.append(str(Path(__file__).parent.parent))
之后不管在哪里运行这个测试文件,Python都能定位到model所在的目录。
方案3:将项目作为可开发包安装(长期维护推荐)
- 在Game根目录下创建
setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="mygame", version="0.1", packages=find_packages(exclude=["tests"]), )
- 打开终端进入Game根目录,执行:
pip install -e .
这个命令会把项目以"可编辑"模式安装到Python环境中,之后不管在哪个目录运行coverage run,Python都能直接识别model、view等包。
补充说明
你之前添加__init__.py的操作是正确的(让model成为Python包),但问题核心是Python的模块搜索路径里没有包含Game根目录,导致找不到这个包。上面的方案都是围绕把Game根目录加入搜索路径来解决问题。
内容的提问来源于stack exchange,提问作者user15931633
相关产品推荐
相关产品推荐

