如何解决命令行运行Python测试时无法引用子目录模块的问题
你不需要在顶层目录添加__init__.py,问题核心是Python运行时的模块搜索路径中没有包含你的项目顶层目录。PyCharm默认会自动把项目根目录加入模块搜索路径,所以运行正常,而原生命令行执行脚本时不会自动做这个操作,因此找不到utils模块。
解决方法
你可以选择以下任意一种方式解决:
临时指定模块搜索路径运行
执行命令时临时把当前目录加入PYTHONPATH环境变量即可:- Mac/Linux 终端:
PYTHONPATH=$(pwd) python tests/test.py - Windows CMD:
set PYTHONPATH=%cd% && python tests/test.py - Windows PowerShell:
$env:PYTHONPATH=$pwd.Path; python tests/test.py
- Mac/Linux 终端:
在测试脚本中手动添加搜索路径
在test.py的最开头加入以下代码,把项目根目录主动加入搜索路径:import sys from pathlib import Path # 获取test.py所在目录的父目录(也就是项目根目录)加入搜索路径 sys.path.append(str(Path(__file__).parent.parent.resolve())) from utils import UtilClass x = UtilClass()用模块模式运行脚本
不要直接执行py文件,改用Python的-m参数以模块方式运行,此时当前执行命令的目录会自动加入搜索路径:python -m tests.test注意末尾不要加
.py后缀。长期项目推荐安装为可编辑包
如果你是长期维护这个项目,可以在项目根目录添加pyproject.toml配置文件声明项目结构,之后执行pip install -e .把项目安装为当前环境的可编辑包,之后任何位置运行都能正常导入utils模块,不需要额外配置路径。
内容的提问来源于stack exchange,提问作者C Dorman
相关产品推荐
相关产品推荐

