AttributeError: module 'inspect' has no attribute 'getmro' 特定檔名造成python tensorflow崩潰,例如inspect.py
阿新 • • 發佈:2020-12-30
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...