You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python测试文件置于独立目录时出现Module not found错误求助

解决测试文件夹导入主目录模块的问题

先明确你的项目结构应该是这样:

你的项目根目录/
├── main.py
└── tests/
    └── test.py

出现module main not found的核心原因是Python的模块搜索路径(sys.path)不包含项目根目录:当你直接在tests文件夹里运行test.py时,Python只会把tests/目录加入搜索路径,上层的根目录不在里面,自然找不到main.py对应的模块。

给你三种实用的解决办法:

1. 从根目录以模块方式运行测试

打开终端,切换到项目根目录,执行:

python -m tests.test

这时候Python会把项目根目录加入搜索路径,test.py里直接写import main就能正常导入。如果想用相对导入,test.py里可以写:

from .. import main

注意:相对导入只能在以模块方式运行时生效,不能直接双击或用python tests/test.py运行。

2. 在测试脚本中手动添加根目录到搜索路径

在test.py开头加入这段代码,强制把项目根目录加入Python的搜索路径:

import sys
from pathlib import Path

# 获取当前脚本所在目录的上层目录(也就是项目根目录)
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root))

# 现在可以正常导入main了
import main

这种方式不需要改运行命令,直接运行test.py也能生效,适合快速调试。

3. 将项目转为可安装包(推荐长期项目)

如果你的项目是长期维护的,推荐把它变成标准的Python包,这样不管在哪都能正常导入模块:

  1. 在项目根目录创建setup.py文件,内容如下:
from setuptools import setup, find_packages

setup(
    name="你的项目名称",
    version="0.1.0",
    packages=find_packages(),
    # 如果main.py不在包目录里,还可以加:
    # py_modules=["main"],
)
  1. 在根目录执行命令,把项目安装为可编辑模式:
pip install -e .

之后不管你在哪运行test.py,直接写import main就能成功导入。

额外注意

  • 不要给模块起和Python标准库重名的名字(比如不要把main.py改成sys.py),否则会优先导入标准库模块,引发奇怪问题。
  • Python 3.3+支持命名空间包,tests文件夹里不需要空的__init__.py,但如果用相对导入,加一个空的__init__.py能让结构更清晰。

内容的提问来源于stack exchange,提问作者Isaac Kenney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:28:21