open-mmlab / mmocr

OpenMMLab Text Detection, Recognition and Understanding Toolbox
https://mmocr.readthedocs.io/en/dev-1.x/
Apache License 2.0
4.31k stars 746 forks source link

[Bug] ImportError: cannot import name 'Dict' from partially initialized module 'typing' (most likely due to a circular import) #1537

Closed vansin closed 1 year ago

vansin commented 1 year ago

Prerequisite

Task

I'm using the official example scripts/configs for the officially supported tasks/models/datasets.

Branch

1.x branch https://github.com/open-mmlab/mmocr/tree/dev-1.x

Environment


(mmocr-1.x) ➜  mmocr git:(dev-1.x) ✗ python mmocr/utils/collect_env.py
Traceback (most recent call last):
  File "mmocr/utils/collect_env.py", line 2, in <module>
    from mmengine.utils import get_git_hash
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/__init__.py", line 3, in <module>
    from .config import *
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/__init__.py", line 2, in <module>
    from .config import Config, ConfigDict, DictAction
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 15, in <module>
    from typing import Any, Optional, Sequence, Tuple, Union
  File "/project/openmmlab2/mmocr/mmocr/utils/typing.py", line 4, in <module>
    from typing import Dict, List, Optional, Tuple, Union
ImportError: cannot import name 'Dict' from partially initialized module 'typing' (most likely due to a circular import) (/project/openmmlab2/mmocr/mmocr/utils/typing.py)

Reproduces the problem - code sample


(mmocr-1.x) ➜  mmocr git:(dev-1.x) ✗ python mmocr/utils/collect_env.py
Traceback (most recent call last):
  File "mmocr/utils/collect_env.py", line 2, in <module>
    from mmengine.utils import get_git_hash
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/__init__.py", line 3, in <module>
    from .config import *
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/__init__.py", line 2, in <module>
    from .config import Config, ConfigDict, DictAction
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 15, in <module>
    from typing import Any, Optional, Sequence, Tuple, Union
  File "/project/openmmlab2/mmocr/mmocr/utils/typing.py", line 4, in <module>
    from typing import Dict, List, Optional, Tuple, Union
ImportError: cannot import name 'Dict' from partially initialized module 'typing' (most likely due to a circular import) (/project/openmmlab2/mmocr/mmocr/utils/typing.py)

Reproduces the problem - command or script


(mmocr-1.x) ➜  mmocr git:(dev-1.x) ✗ python mmocr/utils/collect_env.py
Traceback (most recent call last):
  File "mmocr/utils/collect_env.py", line 2, in <module>
    from mmengine.utils import get_git_hash
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/__init__.py", line 3, in <module>
    from .config import *
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/__init__.py", line 2, in <module>
    from .config import Config, ConfigDict, DictAction
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 15, in <module>
    from typing import Any, Optional, Sequence, Tuple, Union
  File "/project/openmmlab2/mmocr/mmocr/utils/typing.py", line 4, in <module>
    from typing import Dict, List, Optional, Tuple, Union
ImportError: cannot import name 'Dict' from partially initialized module 'typing' (most likely due to a circular import) (/project/openmmlab2/mmocr/mmocr/utils/typing.py)

Reproduces the problem - error message


(mmocr-1.x) ➜  mmocr git:(dev-1.x) ✗ python mmocr/utils/collect_env.py
Traceback (most recent call last):
  File "mmocr/utils/collect_env.py", line 2, in <module>
    from mmengine.utils import get_git_hash
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/__init__.py", line 3, in <module>
    from .config import *
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/__init__.py", line 2, in <module>
    from .config import Config, ConfigDict, DictAction
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 15, in <module>
    from typing import Any, Optional, Sequence, Tuple, Union
  File "/project/openmmlab2/mmocr/mmocr/utils/typing.py", line 4, in <module>
    from typing import Dict, List, Optional, Tuple, Union
ImportError: cannot import name 'Dict' from partially initialized module 'typing' (most likely due to a circular import) (/project/openmmlab2/mmocr/mmocr/utils/typing.py)

Additional information

No response

vansin commented 1 year ago
(mmocr-1.x) ➜  mmocr git:(dev-1.x) ✗ pip list
Package            Version     Editable project location
------------------ ----------- -------------------------
addict             2.4.0
albumentations     1.3.0
asynctest          0.13.0
attrs              22.1.0
brotlipy           0.7.0
certifi            2022.6.15
cffi               1.15.1
charset-normalizer 2.0.4
click              8.1.3
codecov            2.1.12
colorama           0.4.5
commonmark         0.9.1
contourpy          1.0.5
coverage           6.4.4
cryptography       37.0.1
cycler             0.11.0
flake8             5.0.4
fonttools          4.37.2
idna               3.3
imageio            2.21.3
imgaug             0.4.0
importlib-metadata 4.12.0
iniconfig          1.1.1
interrogate        1.5.0
isort              5.10.1
jarowinkler        1.2.1
joblib             1.2.0
kiwisolver         1.4.4
kwarray            0.6.3
lanms-neo          1.0.2
lmdb               1.3.0
Markdown           3.4.1
matplotlib         3.6.0
mccabe             0.7.0
mkl-fft            1.3.1
mkl-random         1.2.2
mkl-service        2.4.0
mmcv               2.0.0rc2
mmdet              3.0.0rc3
mmengine           0.3.1
mmocr              1.0.0rc3    /project/openmmlab2/mmocr
model-index        0.1.11
networkx           2.8.6
numpy              1.23.1
opencv-python      4.6.0.66
openmim            0.3.1
ordered-set        4.1.0
packaging          21.3
pandas             1.4.4
parameterized      0.8.1
Pillow             9.2.0
pip                22.1.2
pluggy             1.0.0
py                 1.11.0
pyclipper          1.3.0.post3
pycocotools        2.0.4
pycodestyle        2.9.1
pycparser          2.21
pyflakes           2.5.0
Pygments           2.13.0
pyOpenSSL          22.0.0
pyparsing          3.0.9
PySocks            1.7.1
pytest             7.1.3
pytest-cov         3.0.0
pytest-runner      6.0.0
python-dateutil    2.8.2
pytz               2022.2.1
PyWavelets         1.4.0
PyYAML             6.0
qudida             0.0.4
rapidfuzz          2.9.0
requests           2.28.1
rich               12.5.1
scikit-image       0.19.3
scikit-learn       1.1.3
scipy              1.9.1
setuptools         63.4.1
Shapely            1.8.4
six                1.16.0
tabulate           0.8.10
termcolor          2.0.1
terminaltables     3.1.10
threadpoolctl      3.1.0
tifffile           2022.8.12
toml               0.10.2
tomli              2.0.1
torch              1.12.1
torchvision        0.13.1
typing_extensions  4.3.0
ubelt              1.2.2
urllib3            1.26.11
wheel              0.37.1
xdoctest           1.1.0
yapf               0.32.0
zipp               3.8.1
vansin commented 1 year ago
(mmocr-1.x) ➜  mmocr git:(dev-1.x) ✗ python tools/train.py configs/textdet/fcenet/fcenet_resnet50_fpn_1500e_icdar2015.py                                                    
Traceback (most recent call last):
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 51, in __getattr__
    value = super().__getattr__(name)
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/addict/addict.py", line 67, in __getattr__
    return self.__getitem__(item)
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 47, in __missing__
    raise KeyError(name)
KeyError: 'ic15_det_train'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "tools/train.py", line 117, in <module>
    main()
  File "tools/train.py", line 62, in main
    cfg = Config.fromfile(args.config)
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 172, in fromfile
    cfg_dict, cfg_text = Config._file2dict(filename,
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 432, in _file2dict
    eval(codeobj, global_locals_var, global_locals_var)
  File "", line 16, in <module>
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/site-packages/mmengine/config/config.py", line 53, in __getattr__
    raise AttributeError(f"'{self.__class__.__name__}' object has no "
AttributeError: 'ConfigDict' object has no attribute 'ic15_det_train'
Exception ignored in: <function _TemporaryFileCloser.__del__ at 0x7fca90944a60>
Traceback (most recent call last):
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/tempfile.py", line 440, in __del__
    self.close()
  File "/home/huwenxing/miniconda3/envs/mmocr-1.x/lib/python3.8/tempfile.py", line 436, in close
    unlink(self.name)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmp7eafrleo/tmpfe8kbg4e.py'