测试自定义Python包时无法跨目录导入decorators模块求助
解决Python测试中无法导入同级模块的问题
问题原因
你的tests目录和decorators目录是同级的,Python默认只会把当前脚本所在目录和系统默认路径加入模块搜索路径,所以找不到上层的decorators包。
解决方法
方法1:临时修改sys.path(快速测试用)
在decorator1_test.py的最开头添加以下代码,把项目根目录(power_decos)加入Python的模块搜索路径:
import sys from pathlib import Path # 获取当前脚本的父目录的父目录,也就是项目根目录 sys.path.append(str(Path(__file__).parent.parent)) # 现在就能正常导入了 from decorators import decorator1
方法2:用pip可编辑模式安装包(长期开发推荐)
这种方法能让Python把你的decorators包当作全局可导入的模块,适合长期开发场景:
- 在
power_decos根目录下创建setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="power_decos", version="0.1.0", packages=find_packages(exclude=["tests*"]), )
- 打开终端,进入
power_decos目录,运行以下命令:
pip install -e .
安装完成后,你在任何地方(包括tests目录的脚本里)都可以直接执行from decorators import decorator1,不会再报错。
方法3:设置PYTHONPATH环境变量(一次性运行用)
在运行测试脚本前,把项目根目录加入PYTHONPATH环境变量:
- Linux/macOS终端:
export PYTHONPATH=/你的项目路径/power_decos:$PYTHONPATH # 然后运行测试,比如 pytest tests/decorator1_test.py
- Windows命令提示符:
set PYTHONPATH=C:\你的项目路径\power_decos;%PYTHONPATH% pytest tests/decorator1_test.py
内容的提问来源于stack exchange,提问作者Navid Yaghmaei
相关产品推荐
相关产品推荐

