PaddleClas icon indicating copy to clipboard operation
PaddleClas copied to clipboard

predict_cls里面不能从utils导入logger怎么回事呢?utils打开也是空的

Open dandanRenn opened this issue 1 year ago • 3 comments

欢迎您使用PaddleClas并反馈相关问题,非常感谢您对PaddleClas的贡献! 提出issue时,辛苦您提供以下信息,方便我们快速定位问题并及时有效地解决您的问题:

  1. PaddleClas版本以及PaddlePaddle版本:请您提供您使用的版本号或分支信息,如PaddleClas release/2.2和PaddlePaddle 2.1.0
  2. 涉及的其他产品使用的版本号:如您在使用PaddleClas的同时还在使用其他产品,如PaddleServing、PaddleInference等,请您提供其版本号
  3. 训练环境信息: a. 具体操作系统:Windows b. Python版本号:Python3.8 c. CPU
  4. 完整的代码(相比于repo中代码,有改动的地方)、详细的错误信息及相关log
  5. error:cannot import name 'logger' from 'utils'

dandanRenn avatar Jul 20 '22 08:07 dandanRenn

环境:docker内的ubutun,python3.8

遇到类似的问题:

# pip list|grep paddle
paddleclas                        2.4.2
paddleocr                         2.0.6
paddlepaddle-gpu           2.1.1

import paddleclas报错信息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/dist-packages/paddleclas/__init__.py", line 16, in <module>
    from .paddleclas import PaddleClas
  File "/usr/local/lib/python3.8/dist-packages/paddleclas/paddleclas.py", line 36, in <module>
    from deploy.python.predict_cls import ClsPredictor
  File "/usr/local/lib/python3.8/dist-packages/paddleclas/deploy/python/predict_cls.py", line 23, in <module>
    from utils import logger
ImportError: cannot import name 'logger' from 'utils' (/ocr/utils/__init__.cpython-38-x86_64-linux-gnu.so)

看来是这个文件/usr/local/lib/python3.8/dist-packages/paddleclas/deploy/python/predict_cls.py直接import了我代码目录utils,这不应该吧。

换一个目录,执行import paddleclas,错误有所不同:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/dist-packages/paddleclas/__init__.py", line 16, in <module>
    from .paddleclas import PaddleClas
  File "/usr/local/lib/python3.8/dist-packages/paddleclas/paddleclas.py", line 36, in <module>
    from deploy.python.predict_cls import ClsPredictor
  File "/usr/local/lib/python3.8/dist-packages/paddleclas/deploy/python/predict_cls.py", line 23, in <module>
    from utils import logger
  File "/usr/local/lib/python3.8/dist-packages/paddleclas/deploy/utils/__init__.py", line 5, in <module>
    from . import encode_decode
ImportError: cannot import name 'encode_decode' from partially initialized module 'utils' (most likely due to a circular import) (/usr/local/lib/python3.8/dist-packages/paddleclas/deploy/utils/__init__.py)

重新启动了一个新的容器,后面那个报错没有出现,前面那个报错依旧,是因为这个当前环境已经将当前目录加入到path中,而当前目录下也有也一个utils的目录,造成了冲突,这也是一个问题。

cyy0523xc avatar Jul 20 '22 10:07 cyy0523xc

谢谢反馈!我们将尽快修复该问题。

TingquanGao avatar Jul 20 '22 11:07 TingquanGao

建议代码放到统一的目录下,避免和客户的代码冲突

cyy0523xc avatar Jul 20 '22 11:07 cyy0523xc

该问题已解决,可以重新安装试试:pip install paddleclas==2.4.3

如有问题,可以继续评论,感谢对PaddleClas的关注~

TingquanGao avatar Aug 23 '22 12:08 TingquanGao