2014-01-17 36 views
6

我一直试图在我的Python程序中使用协议缓冲区,但无法让它正常工作。我正在运行Windows 8机器,并尝试过Python 2.7.6和Python 3.3。 我下载了Python的二进制协议缓冲编译器,并用它从我的myProto.proto文件生成myProto_pb2.py,但是当我收到以下错误,当我跑我的Python程序:从“进口myProto_pb2”行如何在Windows上使用Python协议缓冲区?

,我得到的

from google.protobuf import descriptor as _descriptor 
    ImportError: No module named google.protobuf 

我怎样才能正确地从Windows上的Python安装和运行协议缓冲区:从协议缓冲区2.5版使用Python 2.7.6时,下面的错误?

回答

8

如何在Windows上正确安装并从Python运行协议缓冲区?

与其他任何软件包一样,如果要安装它,则必须实际安装它。如果你只是试着运行在你的源代码目录中的软件包,它可能可能工作,但大多数软件包不能这样工作;你倾向于获得像顶级包import ing这样的东西,然后在尝试import其他东西时会失败几行......完全如您所见。

我相信一个可安装的软件包来自GoogleCode的主要下载软件包。至少它适用于源代码包,如果不是win32包的话。并且在python目录内有完整的安装说明。基本上是:

C:\path\to\protobuf-2.5.0> cd python 
C:\path\to\protobuf-2.5.0\python> python setup.py build 
C:\path\to\protobuf-2.5.0\python> python setup.py test 
C:\path\to\protobuf-2.5.0\python> python setup.py install 

但如果不来了Win32预编译的软件包,或者你没有它躺在身边了,或者你只是喜欢安装过的PyPI,它也提供there。所以,假设you've got pip installed

pip install protobuf 
+0

谢谢!它似乎工作......出于某种原因,我可以从像Cygwin这样的命令提示符运行我的Python程序,但从默认的空闲编辑器启动时仍然会出现导入错误。 – user2399973

+0

@ user2399973:我的猜测是,您实际上已经安装了两个Python安装 - 可能是一个cygwin Python和一个本地win32 Python。您已经将protobuf正确安装到了cygwin Python中,因此它可以在命令行运行cygwin Python时使用,但是您尚未将它安装到本机Python中,所以在运行本机Python的IDLE时它不起作用。但是,真的,这只是一个猜测。发布一个_new问题_,描述您的设置,显示实际的错误信息(如有),而不是仅仅描述它等。 – abarnert