NVIDIA Jetson Xavier NX上匯入tensorflow報錯:AttributeError: module ‘wrapt‘ has no att

語言: CN / TW / HK

攜手創作,共同成長!這是我參與「掘金日新計劃 · 8 月更文挑戰」的第2天,點選檢視活動詳情


環境說明:


  • NVIDIA Xavier NX 開發板
  • 安裝tensorflow==2.3.0

1 問題說明

1、安裝顯示已經成功安裝了tensorflow

在這裡插入圖片描述

2、匯入tensorflow的時候報錯:AttributeError: module 'wrapt' has no attribute 'ObjectProxy'

```python

import tensorflow 2020-10-23 14:09:05.184865: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.2 Traceback (most recent call last): File "", line 1, in File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/init.py", line 41, in from tensorflow.python.tools import module_util as _module_util File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/init.py", line 45, in from tensorflow.python import data File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/data/init.py", line 25, in from tensorflow.python.data import experimental File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/data/experimental/init.py", line 96, in from tensorflow.python.data.experimental import service File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/data/experimental/service/init.py", line 21, in from tensorflow.python.data.experimental.ops.data_service_ops import distribute File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/data/experimental/ops/data_service_ops.py", line 25, in from tensorflow.python.data.experimental.ops import compression_ops File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/data/experimental/ops/compression_ops.py", line 20, in from tensorflow.python.data.util import structure File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/data/util/structure.py", line 26, in from tensorflow.python.data.util import nest File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/data/util/nest.py", line 41, in from tensorflow.python.framework import sparse_tensor as _sparse_tensor File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/framework/sparse_tensor.py", line 28, in from tensorflow.python.framework import composite_tensor File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/framework/composite_tensor.py", line 27, in from tensorflow.python.util import nest File "/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/util/nest.py", line 1430, in _pywrap_utils.RegisterType("ObjectProxy", _wrapt.ObjectProxy) AttributeError: module 'wrapt' has no attribute 'ObjectProxy'

```

如果你再次匯入:import tensorflow as tf,還有可能會出現錯誤:TypeError: Value already registered for Mapping,反正都是一個問題,請繼續看下文吧!

2 解決錯誤

2.1 找到問題的原因

遇到問題,首先是谷歌、百度,但是結果是沒有人遇到這種問題,因此我也就不知道問題該如何解決!

這時候只能從問題的根源尋找問題原因,才能找到解決問題的方式,首先定位到問題出現的程式碼:/home/zhihui/.local/lib/python3.6/site-packages/tensorflow/python/util/nest.py,於是就到這個檔案中去找_wrapt.ObjectProxy,然後通過程式碼定位到wrapt是一個python的庫包

nest.py程式碼中有匯入:

import wrapt as _wrapt

因此我想到這可能是wrapt版本的問題導致的部分屬性已經不存在了

1、檢視Jetson Xavier NX上安裝的wrapt的版本,結果是:1.12.1

python [email protected]:~$ pip3 show wrapt Name: wrapt Version: 1.12.1 Summary: Module for decorators, wrappers and monkey patching. Home-page: http://github.com/GrahamDumpleton/wrapt Author: Graham Dumpleton Author-email: [email protected] License: BSD Location: /home/zhihui/.local/lib/python3.6/site-packages Requires: Required-by: tensorflow [email protected]:~$

2、檢視我個人PC上安裝wrapt的版本,結果是:1.11.1

```python C:\Users\93176>pip show wrapt Name: wrapt Version: 1.11.1 Summary: Module for decorators, wrappers and monkey patching. Home-page: http://github.com/GrahamDumpleton/wrapt Author: Graham Dumpleton Author-email: [email protected] License: BSD Location: c:\programdata\anaconda3\lib\site-packages Requires: Required-by: -ensorflow-gpu, tensorflow-gpu, astroid

C:\Users\93176>python Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information.

import wrapt as _wrapt _wrapt.ObjectProxy

```

因此確定是wrapt版本的問題

2.2 最終錯誤的解決方式

1、降低wrapt的版本到1.11.1

pip3 install wrapt==1.11.1

2、再次在NVIDIA Jetson Xavier NX匯入tensorflow

pythonpython [email protected]:~$ python Python 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information.

import tensorflow as tf 2020-10-23 14:43:46.641605: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.2

```

而且用:tf.test.is_gpu_available() 返回的也是True,即GPU可用!