无法导入 Tensorflow "No module named copyreg"

Unable to import Tensorflow "No module named copyreg"

El Capitan OS 在这里。我一直在尝试通过将 Tensorflow 导入我的 ipython notebook 来找到解决方法,但到目前为止运气不好。

像论坛中的许多人一样,我也遇到过安装 tensorflow 的问题,因为有六个包。在对 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

我收到一条消息,提示 tensorflow 已正确安装。即使我做了 sudo pip install tensorflow 我也收到消息:

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)

但是,当我在 ipython 笔记本上进行 import tensorflow 时,我收到消息:ImportError: No module named tensorflow

我进一步挖掘并在导入时也发现了这个错误:

In [1]: import tensorflow
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-a649b509054f> in <module>()
----> 1 import tensorflow

/usr/local/lib/python2.7/site-packages/tensorflow/__init__.py in <module>()
      2 # module.
      3 # pylint: disable=wildcard-import
----> 4 from tensorflow.python import *

/usr/local/lib/python2.7/site-packages/tensorflow/python/__init__.py in <module>()
     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 <module>()
      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 <module>()
     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 <module>()
     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

Copyreg 可以在 Python2 的六个模块中找到。

简答,试试upgrading/installing六:

pip install -U six

也许尝试重新安装六个。它看起来与您的其他图书馆位于不同的位置。 /Library/Python/... vs /usr/local/lib/... 这可能意味着在自制 python 之前安装了六个。

正如 Jonah 评论的那样,问题已解决:

在 MacOSX 上

如果遇到:

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

解决方法:TensorFlow依赖protobuf,protobuf需要six-1.10.0。苹果默认的python环境有six-1.4.1,升级可能比较困难。因此,我们建议通过自制软件安装 python 的单独副本:

brew install python

但我强烈建议为此目的使用 virtualenv。

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

接下来,设置一个新的virtualenv环境。要设置在目录~/tensorflow,运行:

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

然后激活虚拟环境:

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

在 virtualenv 中,安装 TensorFlow:

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

然后您可以 运行 您的 TensorFlow 程序,例如:

(tensorflow)$ python tensorflow/models/image/mnist/convolutional.py

# When you are done using TensorFlow:
(tensorflow)$ deactivate  # Deactivate the virtualenv

$  # Your prompt should change back

我尝试解决此问题的另一种简单方法是编辑源代码和 python_message.py 并将行 import six.moves.copyreg as copyreg 更改为 from six.moves import copyreg.

当然,您可能需要更改此只读文件的权限才能对其进行修改。