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

18

我希望在我的项目中添加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 之外,所有依赖项都已正确安装。

备注:我的应用程序使用OAuth2来保护对API的访问。更新组件之前它一直工作正常,现在即使我回滚代码,删除libs文件夹并重新安装依赖项,我仍然遇到了No module错误,并且似乎dev_appserver没有在libs文件夹中寻找该依赖项!

这是 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信息:

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
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库文件夹中删除了Google库,现在它又可以正常工作了!


我的谷歌包在.local/lib/python2.7/site-packages中。这可能取决于您如何安装python/pip。您删除了哪些包?删除包会对您的系统造成任何危害吗? - Erik van den Hoorn

1
我创建了一个虚拟环境,并尝试运行一个脚本,该脚本使用服务账号将数据插入到Google Cloud BigQuery中,并使用cron文件进行自动化。对我来说,解决方案是将/usr/local/bin/python替换为我的虚拟环境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路径: $ which python
确保激活您的虚拟环境���如果有)。

1

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

pip3 install pipenv
pipenv install
pipenv shell

然后安装你所需要的库。

0
如果以上方法都不适用于您 - 我在GitHub上找到了hiranya911的this answer。这个方案完美地解决了我的问题。

0
在我的情况下,是因为文件本身被称为google.py,所以它试图导入自己。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接