一个奇怪的问题——ImportError: No module named google.protobuf.internal

编译好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。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值