AttributeError: module 'inspect' has no attribute 'getmro' 特定文件名造成python tensorflow崩溃,例如inspect.py

解决方案:换一个文件名,不要用inspect.py

bug复现:

  • 在当前路径下,新建一个inspect.py文件,内容随意。
  • 保持当前路径,执行python,进入交互式程序
  • 执行import tensorflow 就会出现bug:

如果inspect.py文件的内容有bug,那么会报因为那个bug导致tensorflow无法运行。
eg1:inspect.py文件只有一行import haha

(base) [root@VM-XXX-205-centos ~]# python
Python 3.8.3 (default, Jul  2 2020, 16:21:59) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/anaconda3/lib/python3.8/site-packages/tensorflow/__init__.py", line 34, in <module>
    import inspect as _inspect
  File "/root/inspect.py", line 1, in <module>
    import haha
ModuleNotFoundError: No module named 'haha'

如果inspect.py文件的内容没bug,由于替换了tensorflow自己的inspect文件,也会报错。
eg2:inspect.py文件只有一行pass

(base) [root@VM-197-205-centos ~]# python
Python 3.8.3 (default, Jul  2 2020, 16:21:59) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/anaconda3/lib/python3.8/site-packages/tensorflow/__init__.py", line 41, in <module>
    from tensorflow.python.tools import module_util as _module_util
  File "/root/anaconda3/lib/python3.8/site-packages/tensorflow/python/__init__.py", line 40, in <module>
    from tensorflow.python.eager import context
  File "/root/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/context.py", line 32, in <module>
    from tensorflow.core.framework import function_pb2
  File "/root/anaconda3/lib/python3.8/site-packages/tensorflow/core/framework/function_pb2.py", line 7, in <module>
    from google.protobuf import descriptor as _descriptor
  File "/root/anaconda3/lib/python3.8/site-packages/google/protobuf/__init__.py", line 37, in <module>
    __import__('pkg_resources').declare_namespace(__name__)
  File "/root/anaconda3/lib/python3.8/site-packages/pkg_resources/__init__.py", line 3257, in <module>
    def _initialize_master_working_set():
  File "/root/anaconda3/lib/python3.8/site-packages/pkg_resources/__init__.py", line 3240, in _call_aside
    f(*args, **kwargs)
  File "/root/anaconda3/lib/python3.8/site-packages/pkg_resources/__init__.py", line 3269, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/root/anaconda3/lib/python3.8/site-packages/pkg_resources/__init__.py", line 573, in _build_master
    ws = cls()
  File "/root/anaconda3/lib/python3.8/site-packages/pkg_resources/__init__.py", line 566, in __init__
    self.add_entry(entry)
  File "/root/anaconda3/lib/python3.8/site-packages/pkg_resources/__init__.py", line 622, in add_entry
    for dist in find_distributions(entry, True):
  File "/root/anaconda3/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1980, in find_distributions
    finder = _find_adapter(_distribution_finders, importer)
  File "/root/anaconda3/lib/python3.8/site-packages/pkg_resources/__init__.py", line 3169, in _find_adapter
    types = _always_object(inspect.getmro(getattr(ob, '__class__', type(ob))))
AttributeError: module 'inspect' has no attribute 'getmro'

应该是tensorflow初始化的时候会加载一个存在于python自己系统路径的inspect.py脚本,但是检测到当前路径下也有inspect.py,就优先使用当前路径下的inspect.py了。
猛一看报错信息真是一脸懵逼,interesting 的 bug...

posted @ 2020-12-30 11:51  initzhang  阅读(451)  评论(0)    收藏  举报