如何修复appengine ImportError:没有名为protobuf的模块?

时间:2016-08-17 18:03:24

标签: python google-app-engine protocol-buffers python-import

我有以下文件夹结构:

myappdir
  - libs
    - somelib
      script1.py
      script2.py
    - google
      - protobuf
          __init__.py
          message.py
          ...
      __init__.py
      ...
    app.yaml
    appengine_config.py
    ...

以下文件内容 -

appengine_config.py

import sys
sys.path.append('libs')

script1.py

from somelib.script2 import Something

script2.py

from google.protobuf import message

结果我得到:

  File "myappdir/libs/somelib/script1.py", line 34, in <module>
    from somelib.script2 import Something
  File "myappdir/libs/somelib/script2.py", line 38, in <module>
    from google.protobuf import message
ImportError: No module named protobuf

我的设置有什么问题?

2 个答案:

答案 0 :(得分:0)

更改 appengine_config.py 文件中的行:

import sys
sys.path.append('libs')

为:

import sys
import os.path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'libs'))

答案 1 :(得分:0)

我发现@ Daniel的答案已经在我的设置中实现了,但仍然有问题。 This github评论帮助了我。将以下内容添加到 appengine_config.py 为我解决了这个问题:

from google.appengine.ext import vendor
vendor.add('lib')
import google.protobuf; print(google.protobuf.__version__)

根据您的项目目录命名,将lib更改为libs