Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x GCP应用程序引擎API不可用,使用py 3_Python 3.x_Google App Engine_Google Cloud Platform_Google Admin Sdk - Fatal编程技术网

Python 3.x GCP应用程序引擎API不可用,使用py 3

Python 3.x GCP应用程序引擎API不可用,使用py 3,python-3.x,google-app-engine,google-cloud-platform,google-admin-sdk,Python 3.x,Google App Engine,Google Cloud Platform,Google Admin Sdk,我正在尝试使用一个服务帐户从AppEngine使用AdminSDK API,该帐户具有域范围的授权,允许它模拟管理员 我找到了好几本这样做的指南,但没有一本像我预期的那样有效 下面的代码已部署到App Engine Standard中 main.py from flask import Flask from google.auth import app_engine import google.auth try: import googleclouddebugger goog

我正在尝试使用一个服务帐户从AppEngine使用AdminSDK API,该帐户具有域范围的授权,允许它模拟管理员

我找到了好几本这样做的指南,但没有一本像我预期的那样有效

下面的代码已部署到App Engine Standard中

main.py

from flask import Flask
from google.auth import app_engine
import google.auth


try:
    import googleclouddebugger
    googleclouddebugger.enable()
except ImportError:
    pass

SCOPES = ['https://www.googleapis.com/auth/admin.directory.user']

app = Flask(__name__)

@app.route('/')
def hello():
    credentials, project = google.auth.default()

    appIdentity = app_engine.app_identity

    credentials = app_engine.Credentials(scopes=SCOPES)

    ret = "Expired:{}".format(credentials.expired)
    ret += "\nvalid:{}".format(credentials.valid)
    return 'Hello World!\n'+ret


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)
app.yaml

runtime: python37
代码
credentials=app\u引擎。由于
app\u引擎,凭据(scopes=scopes)
将向应用程序发送500条错误消息。app\u标识始终为
none

"Traceback (most recent call last):
  File "/env/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/env/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/env/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/env/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/env/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/env/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/srv/main.py", line 52, in hello
    credentials = app_engine.Credentials(scopes=SCOPES)
  File "/env/lib/python3.7/site-packages/google/auth/app_engine.py", line 107, in __init__
    'The App Engine APIs are not available.')
OSError: The App Engine APIs are not available." 
正如您看到的错误报告
中所示,应用程序引擎API不可用
,但GCP项目中没有相同名称的API

下面是我在项目中启用的所有API,以实现项目的要求。当然,错误仍然会出现

这是一个测试环境,如果有人需要访问,请询问,我很乐意为您提供GCP项目的查看器权限


感谢您的时间:)

您使用的是python37运行时(第二代标准环境),它与应用程序引擎API不兼容(只有python27/1代是兼容的)。发件人:

Python 3中没有专有的应用程序引擎API。这 第节列出了建议的更换件

来自google.auth import app_engine的
实际上不可用,因为它们是基于其中一个专有的

要在python37运行时中进行身份验证,请遵循一节。基本上与应用程序标识API不同,在应用程序标识API中,您只需调用一次
Credentials()
,然后使用应用程序标识访问服务,在python37中,您可以使用相应的服务API
Client()
调用(或等效调用)对所需的每个服务进行身份验证:

如果要使用的服务帐户不是应用程序的默认服务帐户,则需要指定它:

您可以通过执行以下任一操作来覆盖此默认流:

  • 设置
    GOOGLE\u应用程序\u凭据
    环境变量。如果设置了此变量,云服务将使用 变量,而不是默认的服务帐户

  • 为云服务实例化
    客户端
    对象时指定凭据。例如,如果您的应用程序正在调用中的云服务 一个不同的项目,你可能需要


非常感谢你。如果之后我需要从appengine服务帐户开始使用域范围的委派,您有什么建议吗?我搜索了几次,但似乎唯一的方法是使用服务帐户json密钥作为SA进行身份验证,然后模拟另一个帐户。你知道从che.Client()方法开始做这件事的方法吗?不幸的是,我没有在这个区域玩过。但我无意中发现,这听起来可能有关联。
# If you don't specify credentials when constructing the client, the
# client library will look for credentials in the environment.
storage_client = storage.Client()