使用tmpdir运行pytest报错:AttributeError: module 'py' has no attribute 'path'
问题描述
使用pip install pytest安装pytest后,运行如下测试用例:
def test_sf_bayer_training(tmpdir): print(tmpdir) _config = TestingTrainerConfigInstance() _config.name = 'test_sf_bayer_training' _config.output_path = tmpdir / _config.name _curr_p = os.getcwd() _config.model_config_path = f'.models/sf.yaml' print(_config) return
出现错误:
File "/home/davids/venvs/vai/lib/python3.10/site-packages/_pytest/_io/terminalwriter.py", line 10, in <module> from _pytest.compat import final File "/home/davids/venvs/vai/lib/python3.10/site-packages/_pytest/compat.py", line 44, in <module> LEGACY_PATH = py.path.local AttributeError: module 'py' has no attribute 'path' Process finished with exit code 1
但在本地IPython中执行py.path.local可正常返回py._path.local.LocalPath,当前环境相关版本:
py==1.11.0 pytest==7.4.0
解决方案
1. 升级py模块到兼容版本
pytest 7.4.0需要更高版本的py模块支持,执行以下命令升级:
pip install --upgrade py
升级后建议保证py版本在1.12.0及以上,该版本修复了模块结构相关问题,可与pytest 7.4.0兼容。
2. 重新安装pytest和py模块
若升级后问题仍存在,可能是安装缓存或依赖冲突导致,先卸载再重新安装:
pip uninstall -y pytest py pip install pytest
重新安装会自动拉取pytest所需的兼容版本py模块,规避版本不匹配问题。
3. 检查虚拟环境一致性
确认运行pytest的环境与IPython使用的是同一个虚拟环境,避免因环境差异导致模块结构不同。可通过以下命令验证:
# 查看当前pytest所在路径 which pytest # 查看当前IPython所在路径 which ipython
若路径不同,切换到对应虚拟环境后再运行测试。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

