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...

浙公网安备 33010602011771号