title: ImportError: No module named google.protobuf
body: <p>I am following <a href="https://developers.google.com/protocol-buffers/docs/pythontutorial" rel="noreferrer">this guide</a> and using the exact sample of addressbook.proto.</p>
  <p>Post the content of compiler generated addressbook_pb2.py file as well.
  When I run the following simple program, there is error saying, cannot find google.protobuf, any ideas how to resolve this issue? Thanks.</p>
  <p>BTW, using Python 2.7 on Mac OSX.</p>
  <pre><code>from addressbook_pb2 import Person
  
  p = Person()
  p.email = &quot;abc&quot;
  
  print p.email
  </code></pre>
  <p><strong>Here is the automated generated file addressbook_pb2.py,</strong></p>
  <pre><code># Generated by the protocol buffer compiler.  DO NOT EDIT!
  # source: addressbook.proto
  
  import sys
  _b=sys.version_info[0]&lt;3 and (lambda x:x) or (lambda x:x.encode('latin1'))
  from google.protobuf import descriptor as _descriptor
  from google.protobuf import message as _message
  from google.protobuf import reflection as _reflection
  from google.protobuf import symbol_database as _symbol_database
  from google.protobuf import descriptor_pb2
  # @@protoc_insertion_point(imports)
  
  _sym_db = _symbol_database.Default()
  
  
  
  
  DESCRIPTOR = _descriptor.FileDescriptor(
    name='addressbook.proto',
    package='tutorial',
    syntax='proto2',
    serialized_pb=_b('\n\x11\x61\x64\x64ressbook.proto\x12\x08tutorial\&quot;\xda\x01\n\x06Person\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\n\n\x02id\x18\x02 \x02(\x05\x12\r\n\x05\x65mail\x18\x03 \x01(\t\x12+\n\x05phone\x18\x04 \x03(\x0b\x32\x1c.tutorial.Person.PhoneNumber\x1aM\n\x0bPhoneNumber\x12\x0e\n\x06number\x18\x01 \x02(\t\x12.\n\x04type\x18\x02 \x01(\x0e\x32\x1a.tutorial.Person.PhoneType:\x04HOME\&quot;+\n\tPhoneType\x12\n\n\x06MOBILE\x10\x00\x12\x08\n\x04HOME\x10\x01\x12\x08\n\x04WORK\x10\x02\&quot;/\n\x0b\x41\x64\x64ressBook\x12 \n\x06person\x18\x01 \x03(\x0b\x32\x10.tutorial.Person')
  )
  _sym_db.RegisterFileDescriptor(DESCRIPTOR)
  
  
  
  _PERSON_PHONETYPE = _descriptor.EnumDescriptor(
    name='PhoneType',
    full_name='tutorial.Person.PhoneType',
    filename=None,
    file=DESCRIPTOR,
    values=[
      _descriptor.EnumValueDescriptor(
        name='MOBILE', index=0, number=0,
        options=None,
        type=None),
      _descriptor.EnumValueDescriptor(
        name='HOME', index=1, number=1,
        options=None,
        type=None),
      _descriptor.EnumValueDescriptor(
        name='WORK', index=2, number=2,
        options=None,
        type=None),
    ],
    containing_type=None,
    options=None,
    serialized_start=207,
    serialized_end=250,
  )
  _sym_db.RegisterEnumDescriptor(_PERSON_PHONETYPE)
  
  
  _PERSON_PHONENUMBER = _descriptor.Descriptor(
    name='PhoneNumber',
    full_name='tutorial.Person.PhoneNumber',
    filename=None,
    file=DESCRIPTOR,
    containing_type=None,
    fields=[
      _descriptor.FieldDescriptor(
        name='number', full_name='tutorial.Person.PhoneNumber.number', index=0,
        number=1, type=9, cpp_type=9, label=2,
        has_default_value=False, default_value=_b(&quot;&quot;).decode('utf-8'),
        message_type=None, enum_type=None, containing_type=None,
        is_extension=False, extension_scope=None,
        options=None),
      _descriptor.FieldDescriptor(
        name='type', full_name='tutorial.Person.PhoneNumber.type', index=1,
        number=2, type=14, cpp_type=8, label=1,
        has_default_value=True, default_value=1,
        message_type=None, enum_type=None, containing_type=None,
        is_extension=False, extension_scope=None,
        options=None),
    ],
    extensions=[
    ],
    nested_types=[],
    enum_types=[
    ],
    options=None,
    is_extendable=False,
    syntax='proto2',
    extension_ranges=[],
    oneofs=[
    ],
    serialized_start=128,
    serialized_end=205,
  )
  
  _PERSON = _descriptor.Descriptor(
    name='Person',
    full_name='tutorial.Person',
    filename=None,
    file=DESCRIPTOR,
    containing_type=None,
    fields=[
      _descriptor.FieldDescriptor(
        name='name', full_name='tutorial.Person.name', index=0,
        number=1, type=9, cpp_type=9, label=2,
        has_default_value=False, default_value=_b(&quot;&quot;).decode('utf-8'),
        message_type=None, enum_type=None, containing_type=None,
        is_extension=False, extension_scope=None,
        options=None),
      _descriptor.FieldDescriptor(
        name='id', full_name='tutorial.Person.id', index=1,
        number=2, type=5, cpp_type=1, label=2,
        has_default_value=False, default_value=0,
        message_type=None, enum_type=None, containing_type=None,
        is_extension=False, extension_scope=None,
        options=None),
      _descriptor.FieldDescriptor(
        name='email', full_name='tutorial.Person.email', index=2,
        number=3, type=9, cpp_type=9, label=1,
        has_default_value=False, default_value=_b(&quot;&quot;).decode('utf-8'),
        message_type=None, enum_type=None, containing_type=None,
        is_extension=False, extension_scope=None,
        options=None),
      _descriptor.FieldDescriptor(
        name='phone', full_name='tutorial.Person.phone', index=3,
        number=4, type=11, cpp_type=10, label=3,
        has_default_value=False, default_value=[],
        message_type=None, enum_type=None, containing_type=None,
        is_extension=False, extension_scope=None,
        options=None),
    ],
    extensions=[
    ],
    nested_types=[_PERSON_PHONENUMBER, ],
    enum_types=[
      _PERSON_PHONETYPE,
    ],
    options=None,
    is_extendable=False,
    syntax='proto2',
    extension_ranges=[],
    oneofs=[
    ],
    serialized_start=32,
    serialized_end=250,
  )
  
  
  _ADDRESSBOOK = _descriptor.Descriptor(
    name='AddressBook',
    full_name='tutorial.AddressBook',
    filename=None,
    file=DESCRIPTOR,
    containing_type=None,
    fields=[
      _descriptor.FieldDescriptor(
        name='person', full_name='tutorial.AddressBook.person', index=0,
        number=1, type=11, cpp_type=10, label=3,
        has_default_value=False, default_value=[],
        message_type=None, enum_type=None, containing_type=None,
        is_extension=False, extension_scope=None,
        options=None),
    ],
    extensions=[
    ],
    nested_types=[],
    enum_types=[
    ],
    options=None,
    is_extendable=False,
    syntax='proto2',
    extension_ranges=[],
    oneofs=[
    ],
    serialized_start=252,
    serialized_end=299,
  )
  
  _PERSON_PHONENUMBER.fields_by_name['type'].enum_type = _PERSON_PHONETYPE
  _PERSON_PHONENUMBER.containing_type = _PERSON
  _PERSON.fields_by_name['phone'].message_type = _PERSON_PHONENUMBER
  _PERSON_PHONETYPE.containing_type = _PERSON
  _ADDRESSBOOK.fields_by_name['person'].message_type = _PERSON
  DESCRIPTOR.message_types_by_name['Person'] = _PERSON
  DESCRIPTOR.message_types_by_name['AddressBook'] = _ADDRESSBOOK
  
  Person = _reflection.GeneratedProtocolMessageType('Person', (_message.Message,), dict(
  
    PhoneNumber = _reflection.GeneratedProtocolMessageType('PhoneNumber', (_message.Message,), dict(
      DESCRIPTOR = _PERSON_PHONENUMBER,
      __module__ = 'addressbook_pb2'
      # @@protoc_insertion_point(class_scope:tutorial.Person.PhoneNumber)
      ))
    ,
    DESCRIPTOR = _PERSON,
    __module__ = 'addressbook_pb2'
    # @@protoc_insertion_point(class_scope:tutorial.Person)
    ))
  _sym_db.RegisterMessage(Person)
  _sym_db.RegisterMessage(Person.PhoneNumber)
  
  AddressBook = _reflection.GeneratedProtocolMessageType('AddressBook', (_message.Message,), dict(
    DESCRIPTOR = _ADDRESSBOOK,
    __module__ = 'addressbook_pb2'
    # @@protoc_insertion_point(class_scope:tutorial.AddressBook)
    ))
  _sym_db.RegisterMessage(AddressBook)
  
  
  # @@protoc_insertion_point(module_scope)
  </code></pre>
  <p><strong>Edit 1</strong></p>
  <p>Tried <code>pip install protobuf</code>, met with the following error,</p>
  <pre><code>Requirement already satisfied (use --upgrade to upgrade): protobuf in /Users/foo/miniconda2/lib/python2.7/site-packages
  Requirement already satisfied (use --upgrade to upgrade): six&gt;=1.9 in /Users/foo/miniconda2/lib/python2.7/site-packages/six-1.10.0-py2.7.egg (from protobuf)
  Requirement already satisfied (use --upgrade to upgrade): setuptools in /Users/foo/miniconda2/lib/python2.7/site-packages (from protobuf)
  </code></pre>
  <p>Here is the output of python version,</p>
  <pre><code>python -V
  Python 2.7.11 :: Continuum Analytics, Inc.
  </code></pre>
  <p><strong>Edit 2</strong></p>
  <p>Post exact error message,</p>
  <pre><code>Traceback (most recent call last):
    File &quot;/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py&quot;, line 1531, in &lt;module&gt;
      globals = debugger.run(setup['file'], None, None, is_module)
    File &quot;/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py&quot;, line 938, in run
      pydev_imports.execfile(file, globals, locals)  # execute the script
    File &quot;/Users/foo/personal/featureExtraction/protobuf_test.py&quot;, line 1, in &lt;module&gt;
      from addressbook_pb2 import Person
    File &quot;/Applications/PyCharm CE.app/Contents/helpers/pydev/_pydev_bundle/pydev_monkey_qt.py&quot;, line 71, in patched_import
      return original_import(name, *args, **kwargs)
    File &quot;/Users/foo/personal/featureExtraction/addressbook_pb2.py&quot;, line 6, in &lt;module&gt;
      from google.protobuf import descriptor as _descriptor
    File &quot;/Applications/PyCharm CE.app/Contents/helpers/pydev/_pydev_bundle/pydev_monkey_qt.py&quot;, line 71, in patched_import
      return original_import(name, *args, **kwargs)
  ImportError: No module named google.protobuf
  </code></pre>
  <p><strong>Edit 3</strong></p>
  <p>error message when <code>import google</code>,</p>
  <p><a href="https://i.stack.imgur.com/v2gS3.png" rel="noreferrer"><img src="https://i.stack.imgur.com/v2gS3.png" alt="enter image description here" /></a></p>
  <p><strong>Edit 4</strong></p>
  <p>Output of <code>which pip</code>,</p>
  <pre><code>which pip
  /Users/foo/miniconda2/bin/pip
  </code></pre>
  <p>Output of <code>sys.executable</code>,</p>
  <p>/Users/foo/anaconda/bin/python</p>
  <p><strong>Edit 5</strong></p>
  <pre><code>foo-mn1:featureExtraction foo$ sudo /Users/foo/miniconda2/bin/pip install protobuf
  Password:
  The directory '/Users/foo/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
  The directory '/Users/foo/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
  Requirement already satisfied (use --upgrade to upgrade): protobuf in /Users/foo/miniconda2/lib/python2.7/site-packages
  Requirement already satisfied (use --upgrade to upgrade): six&gt;=1.9 in /Users/foo/miniconda2/lib/python2.7/site-packages/six-1.10.0-py2.7.egg (from protobuf)
  Requirement already satisfied (use --upgrade to upgrade): setuptools in /Users/foo/miniconda2/lib/python2.7/site-packages (from protobuf)
  foo-mn1:featureExtraction foo$ sudo /Users/foo/miniconda2/bin/pip install google
  The directory '/Users/foo/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
  The directory '/Users/foo/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
  Requirement already satisfied (use --upgrade to upgrade): google in /Users/foo/miniconda2/lib/python2.7/site-packages
  Requirement already satisfied (use --upgrade to upgrade): beautifulsoup4 in /Users/foo/miniconda2/lib/python2.7/site-packages (from google)
  </code></pre>