将Python测试文件移至子目录后出现ModuleNotFoundError求助
Python模块找不到问题的解决办法
问题原因
直接运行tests/test_market_rates.py时,Python的模块搜索路径默认是当前脚本所在的tests/目录,而lib目录在项目主目录,不在这个搜索路径里,所以会抛出ModuleNotFoundError: No module named 'lib'。把脚本移到主目录后,主目录被加入搜索路径,自然能找到lib模块。
下面是几种实用的解决办法:
方法1:在测试脚本中手动添加项目路径
修改test_market_rates.py,在导入语句前把项目主目录加入Python的搜索路径:
import sys import os # 获取当前脚本的上级目录(即项目主目录)并添加到搜索路径 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from lib.utils import say_hello print(say_hello())
修改后不管在哪运行这个脚本,都能找到lib模块。
方法2:使用相对导入(需将tests作为包)
- 在
tests目录下创建空的__init__.py文件,把tests转为Python包。 - 修改
test_market_rates.py的导入语句为相对导入:
from ..lib.utils import say_hello print(say_hello())
- 从项目主目录运行测试脚本,用模块方式启动:
python -m tests.test_market_rates
注意:不能直接在tests目录下运行该脚本,必须从项目主目录执行上述命令。
方法3:设置PYTHONPATH环境变量
运行脚本前,把项目主目录添加到PYTHONPATH环境变量中,让Python识别到lib模块:
- Linux/macOS:
export PYTHONPATH=/你的项目主目录路径 python tests/test_market_rates.py
- Windows(命令提示符):
set PYTHONPATH=C:\你的项目主目录路径 python tests\test_market_rates.py
- Windows(PowerShell):
$env:PYTHONPATH = "C:\你的项目主目录路径" python tests\test_market_rates.py
方法4:将项目转为可安装包(推荐)
这种方式适合长期维护的项目,能彻底解决模块路径问题:
- 在项目主目录创建
setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="你的项目名称", version="0.1", packages=find_packages(), )
- 在项目主目录执行命令,安装开发版包:
pip install -e .
安装完成后,不管在哪个目录运行测试脚本,都能正常导入lib模块。
内容的提问来源于stack exchange,提问作者Nimesh
相关产品推荐
相关产品推荐

