导入错误:没有名为 google.oauth2 的模块

问题描述 投票:0回答:7

我想向我的项目添加 google.cloud.storage 依赖项,因此我尝试使用

安装此依赖项

pip install --upgrade google-cloud-storage

使用 dev_appserver 再次运行我的应用程序,它显示我的 gcloud 组件需要更新。好吧,

gcloud components update

在我的

src/__init__.py
文件中,我得到了告诉 gcloud 在哪个文件夹中查找依赖项的代码,如下所示:

from google.appengine.ext import vendor

vendor.add('src/libs')

所有依赖项均已正确安装,除了我收到错误

ImportError: No module named google.oauth2

PS:我的应用程序使用 OAuth2 来保护对 API 的访问。在我进行组件更新之前它工作正常,现在即使我回滚代码,删除 libs 文件夹并再次安装依赖项,我仍然收到“无模块”错误,并且 dev_appserver 似乎没有在库内寻找该依赖项文件夹!

这是

gcloud --version
的结果:

Google Cloud SDK 188.0.1
app-engine-python 1.9.66
app-engine-python-extras 1.9.63
bq 2.0.28
core 2018.02.08
gsutil 4.28

这是回溯:

Traceback (most recent call last):
  File "/home/login/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/login/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/login/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 96, in LoadObject
    __import__(cumulative_path)
  File "/home/headless/Documents/Projects/meterFleet/app-backend/src/main.py", line 5, in <module>
    from src.app.user.api import UserApi
  File "/home/headless/Documents/Projects/meterFleet/app-backend/src/app/user/api.py", line 7, in <module>
    from src.googleapis.iam import getIamPolicy, addIapUser, deleteIapUser
  File "/home/headless/Documents/Projects/meterFleet/app-backend/src/googleapis/iam.py", line 5, in <module>
    from src.common.authentication import OAuth
  File "/home/headless/Documents/Projects/meterFleet/app-backend/src/common/authentication.py", line 3, in <module>
    from google.oauth2 import service_account
  File "/home/login/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime/sandbox.py", line 1147, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named google.oauth2
python google-app-engine google-cloud-platform google-cloud-sdk
7个回答
13
投票

这个问题我已经遇到过很多次了。我从本地计算机卸载了所有 Google 软件包,删除了 GAE 应用程序文件夹中的 lib 文件夹,再次创建它然后执行:

pip install -t lib google-auth google-auth-httplib2 google-api-python-client --upgrade

这应该可以解决你的问题。


6
投票

只需升级一些 python 包就解决了我的问题:

pip install --upgrade google-auth google-auth-httplib2 google-api-python-client

4
投票

编辑:我认为如果您使用 virtualenv 之类的东西,您永远不会收到此错误。

问题来自于项目文件夹(在

src/libs
文件夹中)和 python 本地库文件夹(/usr/local/python2.7/dist-packages)中安装的依赖项。我从 python libs 文件夹中删除了 google 库,现在它又可以工作了!


1
投票

我决定使用pipenv来解决这个问题。

pip3 install pipenv
pipenv install
pipenv shell

然后安装您需要的库。


1
投票

我创建了 virtualenv,并尝试运行一个脚本,在其中使用服务帐户将数据插入 google cloud bigquery 并使用 cron 文件将其自动化,对我来说,解决方案是将 usr/local/bin/python 替换为我的 virtualenv python 路径.

旧的 cron 文件:

30 11 * * * /usr/local/bin/python3 /opt/deployment/cronJobs/ProjectAssetMetrics/daily/updateCCMSCountJob.py > /opt/deployment/cronJobs/ProjectAssetMetrics/daily/updateCCMSCountJob.log 2>&1 在你的

新的 cron 文件:

16 12 * * * /opt/.envs/sl_dw/bin/python3 /opt/deployment/cronJobs/ProjectAssetMetrics/daily/updateCCMSCountJob.py > /opt/deployment/cronJobs/ProjectAssetMetrics/daily/updateCCMSCountJob.log 2>&

您可以通过输入以下内容来检查您的Python路径:

$ 哪个蟒蛇

确保激活你的 virtualenv(如果有)


1
投票

在我的例子中,这是因为文件本身被称为

google.py
,所以它试图导入自身。


0
投票

如果以上方法都不适合您 - 我通过 hiranya911 从 GitHub 找到了这个答案。完美解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.