编译好pycaffe在import时遇到这个问题:ImportError: No module named google.protobuf.internal
解决方法:
没有anaconda: pip install protobuf (编译caffe就需要这个protobuf)
有anaconda: conda install protobuf (最后装了libprotobuf和protobuf 3.5.2)
======================================================
使用系统自带的python(root下的python,路径为/usr/bin/python)能import这个2.6.1版本的protobuf
使用anaconda自带的python(anaconda2/bin/python)则无法import这个版本的protobuf,可能和protobuf-2.6.1-py2.7-nspkg.pth这个文件有关,内容如下:
import sys, types, os;
has_mfs = sys.version_info > (3, 5);
p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('google',));
importlib = has_mfs and __import__('importlib.util');
has_mfs and __import__('importlib.machinery');
m = has_mfs and sys.modules.setdefault('google', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('google', [os.path.dirname(p)])));
m = m or sys.modules.setdefault('google', types.ModuleType('google'));
mp = (m or []) and m.__dict__.setdefault('__path__',[]);
(p not in mp) and mp.append(p)
如果直接from google.protobuf.internal import enum_type_wrapper会ImportError: No module named google.protobuf.internal
这个文件可能定义了import子包的规则,不过奇怪的是anaconda 自带python的pip也是安在这里,就算这样安装成功也没法import。只有用conda install protobuf才能成功import。
Anaconda官网说:
- You can download other packages using the
pip install
command that is installed with Anaconda. Pip packages provide many of the features of conda packages and in most cases they can work together.
通过sys.path可以看到protobuf3.5.2被装在anaconda2/lib/python2.7/site-packages里了。
搞不懂anaconda怎么组织python环境的,就这时候会忽略通过pip安装的protobuf 2.6.1。