Google Cloud App Engine跨示例模块导入异常问题咨询
解决GAE环境与本地Python环境的依赖隔离问题
这两个错误本质上是Google App Engine(GAE)沙箱运行环境和本地常规Python环境的依赖路径完全隔离导致的——两个环境能访问的库集合不一样,得分别针对性处理:
一、解决GAE应用中No module named google.cloud.speech的错误
当你用dev_appserver.py app.yaml启动GAE应用时,代码是在GAE专属的沙箱里运行的,这个环境默认只预装了GAE原生API(比如google.appengine.api),第三方库像google-cloud-speech需要手动打包到项目中:
- 先把依赖安装到项目内的
lib目录(没有就新建一个):pip install google-cloud-speech -t lib/ - 在项目根目录创建
appengine_config.py文件(GAE会自动读取这个配置),添加以下内容让GAE加载第三方库:from google.appengine.ext import vendor # 告诉GAE去lib目录找第三方依赖 vendor.add('lib') - 重启
dev_appserver.py app.yaml,此时GAE沙箱就能找到google.cloud.speech模块了。
二、解决本地脚本中No module named appengine.api的错误
当你用python2.7 transcribeSpeech.py ...直接运行本地脚本时,你的Python环境默认没有包含GAE SDK的路径,所以找不到google.appengine.api相关模块:
- 从你的报错信息里能看到GAE SDK的路径是
/google/google-cloud-sdk/platform/google_appengine/,把这个路径添加到Python的环境变量里:export PYTHONPATH="$PYTHONPATH:/google/google-cloud-sdk/platform/google_appengine/" - 再运行你的脚本:
如果你不想每次都手动设置环境变量,也可以在脚本开头直接添加路径:python2.7 transcribeSpeech.py resources/audio.rawimport sys # 把GAE SDK路径插入到Python的搜索路径最前面 sys.path.insert(0, '/google/google-cloud-sdk/platform/google_appengine/')
简单总结:GAE沙箱和本地Python环境是完全独立的两个运行环境——GAE应用需要把第三方依赖打包进项目,本地脚本则需要手动引入GAE SDK的路径才能使用GAE原生API。
内容的提问来源于stack exchange,提问作者COROSCOP
相关产品推荐
相关产品推荐

