Flask+uWSGI部署遇ImportError:找不到google.oauth2.credentials模块
解决ImportError: No module named google.oauth2.credentials(Flask + uWSGI环境)
你已经精准踩中了Python 2.7和3.3+之间的一个关键差异点——隐式命名空间包机制。Python 3.3及以后版本允许没有__init__.py的目录作为命名空间包,但Python 2.7完全不支持这一点,这就是为什么Flask内置开发服务器能正常运行,uWSGI却报错的核心原因。
快速修复:手动补全__init__.py
直接在你的google命名空间目录下创建一个空的__init__.py文件就行,Python 2.7就能识别这个目录为合法的包了:
touch /usr/local/lib/python2.7/site-packages/google/__init__.py
这个文件不需要写任何代码,只要存在就够了。
为什么开发服务器没问题?
Flask的内置服务器在启动时,会自动把当前项目目录加入模块搜索路径,而且加载模块的逻辑相对宽松,可能通过其他依赖包的路径间接找到了google.oauth2的位置。但uWSGI一般是用系统级的Python环境加载模块,对包结构的校验更严格,所以立刻就暴露了缺少__init__.py的问题。
更稳妥的长期方案
如果手动创建文件后还遇到其他依赖异常,建议彻底重装相关包,让pip为Python 2.7生成标准的包结构:
pip uninstall google-auth google-api-python-client pip install google-auth google-api-python-client
重装过程中,pip会自动处理Python 2.7的包规范,确保google目录下生成必要的__init__.py,避免后续再出现类似的导入问题。
内容的提问来源于stack exchange,提问作者Gohn67
相关产品推荐
相关产品推荐

