如何在test_cli.py中导入main模块?模块导入失败求助
解决main模块导入问题的几种方法
方法一:临时添加项目根目录到Python路径
在test_cli.py开头添加代码,手动将项目根目录(main.py所在目录)加入Python模块搜索路径,就能正常导入main模块:
import sys from pathlib import Path # 获取项目根目录(tests目录的上层目录) project_root = Path(__file__).parent.parent sys.path.append(str(project_root)) # 后续正常导入并测试 import typer from typer.testing import CliRunner from main import main runner = CliRunner() def test_cli() -> None: result = runner.invoke(main, []) assert result.exit_code == 0 if __name__ == "__main__": test_cli()
方法二:使用相对导入(需调整运行方式)
如果不想修改路径,可以用相对导入,但需将项目作为包运行:
修改test_cli.py的导入语句:
from .. import main
此时不能直接运行python tests/test_cli.py,必须从项目根目录执行:
python -m pytest tests/test_cli.py # 或直接运行测试文件 python -m tests.test_cli
方法三:配置为可安装包(推荐长期方案)
在项目根目录创建pyproject.toml文件,将项目规范为可安装包:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "ink-wizard" version = "0.1.0" packages = ["template_generators"]
然后安装项目为可编辑模式:
pip install -e .
之后在test_cli.py里就能直接import main,所有模块导入都会正常工作,这是Python项目的标准做法。
注意:你的
main.py中调用Invoker.psp22()时用到的mintable、metadata等变量未定义,需补充变量的获取逻辑,否则运行时会报错。
内容的提问来源于stack exchange,提问作者avirajkhare00
相关产品推荐
相关产品推荐

