appengine python remote_api 模块对象没有属性 GoogleCredentials
appengine python remote_api module object has no attribute GoogleCredentials
AttributeError: 'module' 对象没有属性 'GoogleCredentials'
我有一个在本地主机上 运行ning 的 Appengine 应用程序。
我有一些测试 运行 并且我想使用 remote_api 来检查数据库值。
当我尝试通过访问访问 remote_api 时:
'http://127.0.0.1:8080/_ah/remote_api'
我得到一个:
"This request did not contain a necessary header"
但它在浏览器中工作。
当我现在尝试通过调用
从我的测试中调用 remote_api
remote_api_stub.ConfigureRemoteApiForOAuth('localhost:35887','/_ah/remote_api')
我收到错误:
Error
Traceback (most recent call last):
File "/home/dan/src/gtup/test/test_users.py", line 38, in test_crud
remote_api_stub.ConfigureRemoteApiForOAuth('localhost:35887','/_ah/remote_api')
File "/home/dan/Programs/google-cloud-sdk/platform/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 747, in ConfigureRemoteApiForOAuth
credentials = client.GoogleCredentials.get_application_default()
AttributeError: 'module' object has no attribute 'GoogleCredentials'
我确实尝试重新安装整个 google 云,但这没有用。
当我打开 client.py
google-cloud-sdk/platform/google_appengine/lib/google-api-python-client/oauth2client/client.py
它被 remote_api_stub.py 使用,我可以看到,里面没有 GoogleCredentials class。
GoogleCredentials class 存在,但在位于以下位置的其他 client.py 文件中:
google-cloud-sdk/platform/google_appengine/lib/oauth2client/oauth2client/client.py
google-cloud-sdk/platform/gsutil/third_party/oauth2client/oauth2client/client.py
google-cloud-sdk/platform/bq/third_party/oauth2client/client.py
google-cloud-sdk/lib/third_party/oauth2client/client.py
我的 app.yaml 看起来像这样:
application: myapp
version: 1
runtime: python27
api_version: 1
threadsafe: true
libraries:
- name: webapp2
version: latest
builtins:
- remote_api: on
handlers:
- url: /.*
script: main.app
这只是 appengine 内部的一个错误 import/bug。
或者我在我的单元测试中使用 remote_api 做错了什么?
回答而不是评论,因为我不能 post 以我的声誉发表评论 -
类似的事情也发生在我身上,当 运行 这些类型的脚本出现在 mac 上时。有时,您的 PATH 变量对于实际检查哪些文件的功能感到困惑,尤其是当您将 gcloud 安装在应用程序引擎启动器旁边时。如果在 mac 上,我会建议 editing/opening 你的 ~/.bash_profile 文件来解决这个问题(或者可能的 ~/.bashrc,如果在 linux 上)。例如,在我的 Mac 上,我有以下几行来修复我的 PATH 变量:
export PATH="/usr/local/bin:$PATH"
export PYTHONPATH="/usr/local/google_appengine:$PYTHONPATH
这些基本上确保 python / 命令行将在 PATH(或 PYTHONPATH)中的任何内容之前查找 /usr/local/bin(或在 PYTHONPATH 行的情况下为 /usr/local/google_appengine) .
PATH 变量是命令行在提示符中键入文件时检查 python 文件的位置。 PYTHONPATH 是您的 python 文件找到要在运行时加载的模块的地方。
我通过替换文件夹解决了这个问题:
../google-cloud-sdk/platform/google_appengine/lib/google-api-python-client/oauth2client
与:
../google-cloud-sdk/platform/google_appengine/lib/oauth2client/oauth2client
包含在 google-api-python-client 文件夹中的那个现在在客户端文件中具有所需的 Class: GoogleCredentials。
然后我遇到了第二个连接问题,现在我必须打电话给:
remote_api_stub.ConfigureRemoteApiForOAuth('localhost:51805','/_ah/remote_api', False)
请注意,端口每次都会更改,服务器会重新启动。
AttributeError: 'module' 对象没有属性 'GoogleCredentials'
我有一个在本地主机上 运行ning 的 Appengine 应用程序。 我有一些测试 运行 并且我想使用 remote_api 来检查数据库值。 当我尝试通过访问访问 remote_api 时:
'http://127.0.0.1:8080/_ah/remote_api'
我得到一个:
"This request did not contain a necessary header"
但它在浏览器中工作。
当我现在尝试通过调用
从我的测试中调用 remote_apiremote_api_stub.ConfigureRemoteApiForOAuth('localhost:35887','/_ah/remote_api')
我收到错误:
Error
Traceback (most recent call last):
File "/home/dan/src/gtup/test/test_users.py", line 38, in test_crud
remote_api_stub.ConfigureRemoteApiForOAuth('localhost:35887','/_ah/remote_api')
File "/home/dan/Programs/google-cloud-sdk/platform/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 747, in ConfigureRemoteApiForOAuth
credentials = client.GoogleCredentials.get_application_default()
AttributeError: 'module' object has no attribute 'GoogleCredentials'
我确实尝试重新安装整个 google 云,但这没有用。
当我打开 client.py
google-cloud-sdk/platform/google_appengine/lib/google-api-python-client/oauth2client/client.py
它被 remote_api_stub.py 使用,我可以看到,里面没有 GoogleCredentials class。
GoogleCredentials class 存在,但在位于以下位置的其他 client.py 文件中:
google-cloud-sdk/platform/google_appengine/lib/oauth2client/oauth2client/client.py
google-cloud-sdk/platform/gsutil/third_party/oauth2client/oauth2client/client.py
google-cloud-sdk/platform/bq/third_party/oauth2client/client.py
google-cloud-sdk/lib/third_party/oauth2client/client.py
我的 app.yaml 看起来像这样:
application: myapp
version: 1
runtime: python27
api_version: 1
threadsafe: true
libraries:
- name: webapp2
version: latest
builtins:
- remote_api: on
handlers:
- url: /.*
script: main.app
这只是 appengine 内部的一个错误 import/bug。 或者我在我的单元测试中使用 remote_api 做错了什么?
回答而不是评论,因为我不能 post 以我的声誉发表评论 -
类似的事情也发生在我身上,当 运行 这些类型的脚本出现在 mac 上时。有时,您的 PATH 变量对于实际检查哪些文件的功能感到困惑,尤其是当您将 gcloud 安装在应用程序引擎启动器旁边时。如果在 mac 上,我会建议 editing/opening 你的 ~/.bash_profile 文件来解决这个问题(或者可能的 ~/.bashrc,如果在 linux 上)。例如,在我的 Mac 上,我有以下几行来修复我的 PATH 变量:
export PATH="/usr/local/bin:$PATH"
export PYTHONPATH="/usr/local/google_appengine:$PYTHONPATH
这些基本上确保 python / 命令行将在 PATH(或 PYTHONPATH)中的任何内容之前查找 /usr/local/bin(或在 PYTHONPATH 行的情况下为 /usr/local/google_appengine) .
PATH 变量是命令行在提示符中键入文件时检查 python 文件的位置。 PYTHONPATH 是您的 python 文件找到要在运行时加载的模块的地方。
我通过替换文件夹解决了这个问题:
../google-cloud-sdk/platform/google_appengine/lib/google-api-python-client/oauth2client
与:
../google-cloud-sdk/platform/google_appengine/lib/oauth2client/oauth2client
包含在 google-api-python-client 文件夹中的那个现在在客户端文件中具有所需的 Class: GoogleCredentials。
然后我遇到了第二个连接问题,现在我必须打电话给:
remote_api_stub.ConfigureRemoteApiForOAuth('localhost:51805','/_ah/remote_api', False)
请注意,端口每次都会更改,服务器会重新启动。