PaddleClas棘手问题:ImportError: attempted relative import with no known parent package
PaddleClas ImportError问题
问题背景
事先通过pip install -e .
安装了editable版本的PaddleClas包,也在PYTHONPATH
当中添加了相关路径,但是在执行模型推理时,还是遇到了这个问题:
Traceback (most recent call last):
File "/root/mambaforge/envs/py310/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/root/mambaforge/envs/py310/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/workspace/PaddleClas/deploy/python/predict_cls.py", line 19, in <module>
from paddleclas.deploy.utils import logger, config
File "/workspace/PaddleClas/paddleclas.py", line 31, in <module>
from .ppcls.arch import backbone
ImportError: attempted relative import with no known parent package
尝试的方法
结合以前解决过ImportError
的经验,首先尝试用-m参数来作为模板运行,又尝试移动到更高级的目录,以囊括代码执行路径中的各级路径,但都以失败告终。
成因&方法
最后检查项目的setup.py
文件发现,项目的包名字是paddleclas
,但是在项目根目录下,执行主要初始化功能的文件也叫paddleclas.py
,导致PYTHON解释器在执行的时候,先找到了这个文件,把paddleclas
当成了一个独立的文件来执行,导致相对导入全部失效。
于是,尝试把paddleclas.py
重命名为paddleclas_main.py
,问题也顺利解决。