Tensorflow успешно устанавливает на mac, но получает ImportError на copyreg при использовании

После успешной pip install не удалось импортировать библиотеку tensorflow.

>>> import tensorflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/tensorflow/__init__.py", line 4, in <module>
    from tensorflow.python import *
  File "/Library/Python/2.7/site-packages/tensorflow/python/__init__.py", line 13, in <module>
    from tensorflow.core.framework.graph_pb2 import *
  File "/Library/Python/2.7/site-packages/tensorflow/core/framework/graph_pb2.py", line 8, in <module>
    from google.protobuf import reflection as _reflection
  File "/Library/Python/2.7/site-packages/google/protobuf/reflection.py", line 58, in <module>
    from google.protobuf.internal import python_message as message_impl
  File "/Library/Python/2.7/site-packages/google/protobuf/internal/python_message.py", line 59, in <module>
    import six.moves.copyreg as copyreg
ImportError: No module named copyreg

Ответ 1

Вы можете обновить до шести-1.10.x, используя

easy_install -U six

Это позволит обновить текущую версию из шести от 1.4 до 1.10.x, что требуется тензорным потоком.

Ответ 2

Решение: TensorFlow зависит от protobuf, для которого требуется шесть-1.10.0. Стандартная среда python для Apple по умолчанию имеет шесть-1.4.1 и может быть сложной для обновления. Поэтому мы рекомендуем либо установить отдельную копию python через homebrew:

brew установить python

или создание/использование TensorFlow в virtualenv, как описано выше.

Ответ 3

copyreg - это функция python3, доступная в модуле six в python2.x, см. https://docs.python.org/2/library/copy_reg.html#module-copy_reg

Чтобы получить copyreg, вам нужно установить six:

pip install -U six

(Примечание. В python2 вы можете либо получить доступ к функции с помощью (i) six.copy_reg, либо когда модуль импортируется с помощью six.moves.*, он сохраняет синтаксис python3, т.е. six.moves.copyreg)

Ответ 4

Поскольку из предложенных исправлений я работал, я изменил строку

import six.moves.copyreg as copyreg

to

from six.moves import copyreg

и это, похоже, фиксировало эту проблему. Тем не менее, я получил еще один ImportError, говоря

dlopen(/Library/Python/2.7/site-packages/tensorflow/python/_pywrap_tensorflow.so, 2): no suitable image found.  Did find:
/Library/Python/2.7/site-packages/tensorflow/python/_pywrap_tensorflow.so: mach-o, but wrong architecture

Просто опубликуйте это как ответ, если у кого-то может быть больше успеха в этом, чем у меня.