No se puede importar Tensorflow “No hay módulo llamado copyreg”

El Capitán OS aquí. He estado tratando de encontrar una solución alternativa con la importación de Tensorflow en mi notebook ipython, pero hasta ahora no he tenido suerte.

Al igual que muchas personas en los foros, también he tenido problemas con la instalación de tensorflow debido al paquete de seis. Pude instalar después de un poco de inquietud con brew

brew link gdbm brew install python rew linkapps python sudo pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl 

Recibí un mensaje que tensorflow estaba instalado correctamente. Incluso cuando hice sudo pip install tensorflow recibí el mensaje:

 Requirement already satisfied (use --upgrade to upgrade): tensorflow in /usr/local/lib/python2.7/site-packages Requirement already satisfied (use --upgrade to upgrade): six>=1.10.0 in /Library/Python/2.7/site-packages (from tensorflow) Requirement already satisfied (use --upgrade to upgrade): numpy>=1.9.2 in /usr/local/lib/python2.7/site-packages (from tensorflow) 

Sin embargo, cuando estoy en mi notebook ipython e hice un import tensorflow el mensaje: ImportError: No module named tensorflow

He cavado más y encontré este error en la importación también:

 In [1]: import tensorflow --------------------------------------------------------------------------- ImportError Traceback (most recent call last)  in () ----> 1 import tensorflow /usr/local/lib/python2.7/site-packages/tensorflow/__init__.py in () 2 # module. 3 # pylint: disable=wildcard-import ----> 4 from tensorflow.python import * /usr/local/lib/python2.7/site-packages/tensorflow/python/__init__.py in () 11 12 import tensorflow.python.platform ---> 13 from tensorflow.core.framework.graph_pb2 import * 14 from tensorflow.core.framework.summary_pb2 import * 15 from tensorflow.core.framework.config_pb2 import * /usr/local/lib/python2.7/site-packages/tensorflow/core/framework/graph_pb2.py in () 6 from google.protobuf import descriptor as _descriptor 7 from google.protobuf import message as _message ----> 8 from google.protobuf import reflection as _reflection 9 from google.protobuf import symbol_database as _symbol_database 10 from google.protobuf import descriptor_pb2 /usr/local/lib/python2.7/site-packages/google/protobuf/reflection.py in () 56 from google.protobuf.pyext import cpp_message as message_impl 57 else: ---> 58 from google.protobuf.internal import python_message as message_impl 59 60 # The type of all Message classes. /usr/local/lib/python2.7/site-packages/google/protobuf/internal/python_message.py in () 57 58 import six ---> 59 import six.moves.copyreg as copyreg 60 61 # We use "as" to avoid name collisions with variables. ImportError: No module named copyreg 

Como comentó Jonás, esto se resuelve con esto:

En macosx

Si te encuentras con:

 import six.moves.copyreg as copyreg 
 ImportError: No module named copyreg 

Solución: TensorFlow depende de protobuf que requiere seis-1.10.0. El entorno python predeterminado de Apple tiene seis 1.4.1 y puede ser difícil de actualizar. Así que recomendamos instalar una copia separada de python a través de homebrew:

 brew install python 

Pero recomiendo usar virtualenv para este propósito.

 # On Mac: $ sudo easy_install pip # If pip is not already installed $ sudo pip install --upgrade virtualenv 

A continuación, configura un nuevo entorno virtualenv. Para configurarlo en el directorio ~/tensorflow , ejecute:

 $ virtualenv --system-site-packages ~/tensorflow $ cd ~/tensorflow 

Entonces activa el virtualenv:

 $ source bin/activate # If using bash $ source bin/activate.csh # If using csh (tensorflow)$ # Your prompt should change 

Dentro del virtualenv, instale TensorFlow:

 (tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl 

Luego puede ejecutar su progtwig TensorFlow como:

 (tensorflow)$ python tensorflow/models/image/mnist/convolutional.py # When you are done using TensorFlow: (tensorflow)$ deactivate # Deactivate the virtualenv $ # Your prompt should change back 

Copyreg se puede encontrar en el módulo seis en Python2.

Respuesta corta, intente actualizar / instalar seis:

 pip install -U six 

Tal vez intente reinstalar seis. Parece que está en una ubicación diferente de sus otras bibliotecas. /Library/Python/... vs /usr/local/lib/... Esto probablemente significa que se instalaron seis antes de python de homebrew.

Otra forma sencilla de intentar solucionar este problema es editar el código fuente y python_message.py y cambiar la línea import six.moves.copyreg as copyreg from six.moves import copyreg .

Por supuesto, es posible que necesite cambiar el permiso de este archivo de solo lectura para modificarlo.