Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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 如何在从GAE和'访问数据时将数据存储在地面军事系统中;GCE&x27;局部_Python_Google App Engine_Boto_Google Cloud Storage_Google Compute Engine - Fatal编程技术网

Python 如何在从GAE和'访问数据时将数据存储在地面军事系统中;GCE&x27;局部

Python 如何在从GAE和'访问数据时将数据存储在地面军事系统中;GCE&x27;局部,python,google-app-engine,boto,google-cloud-storage,google-compute-engine,Python,Google App Engine,Boto,Google Cloud Storage,Google Compute Engine,有一个GAE项目使用GCS存储/检索文件。这些文件还需要通过在GCE上运行的代码读取(需要C++库,因此不在GAE上运行)。 在生产中,部署在实际GAE>GCS

有一个GAE项目使用GCS存储/检索文件。这些文件还需要通过在GCE上运行的代码读取(需要C++库,因此不在GAE上运行)。 在生产中,部署在实际GAE>GCS 按照建议,我正在使用GoogleAppEngineCloudStorageClient运行GAE的dev_appserver来访问(模拟的)地面军事系统。文件放在本地blobstore中。非常适合测试GAE

因为没有GCE SDK在本地运行VM,所以每当我提到本地“GCE”时,它只是我运行linux的本地开发机器。 在本地GCE方面,我只是使用默认的BOTO库(),用Python 2 .x运行时与C++代码进行接口,并从GCS中检索文件。但是,在开发中,这些文件无法从boto访问,因为它们存储在dev_appserver的blobstore中

是否有办法将本地GAE和GCE正确连接到本地GCS

现在,我放弃了当地的地面军事系统,尝试使用真正的地面军事系统。boto的GCE部分很简单。地面军事系统部件还能够使用access_令牌使用实际地面军事系统,因此它通过以下方式使用实际地面军事系统而不是本地blobstore:

cloudstorage.common.set_access_token(access_token)
根据文件:

access_token: you can get one by run 'gsutil -d ls' and copy the
  str after 'Bearer'.

这种代币只能在有限的时间内使用,所以这并不理想。有没有办法设置更永久的访问令牌?

有一个用于此目的的Google云存储本地/开发服务器:

设置完毕后,创建数据集并启动GCS开发服务器

gcd.sh create [options] <dataset-directory>
gcd.sh start [options] <dataset-directory>
gcd.sh创建[选项]
gcd.sh启动[选项]
导出环境变量

export DATASTORE_HOST=http://yourmachine:8080
export DATASTORE_DATASET=<dataset_id>
导出数据存储\u主机=http://yourmachine:8080
导出数据存储\u数据集=

然后您应该能够在本地使用代码中的
数据存储
连接

从开发环境访问Google云存储有一个方便的选项。您应该使用Google Cloud SDK提供的客户端库。在本地执行
gcloud init
后,您可以访问您的资源

如示例至所示:

#获取应用程序默认凭据。在本地运行时,这些
#运行“gcloud init”后可用。在计算机上运行时
#引擎,这些可从环境中获得。
credentials=GoogleCredentials.get_application_default()
#构建与云存储API交互的服务对象-
#“存储”服务,版本为“v1”。
#您可以在此处浏览其他可用的api服务和版本:
#     https://developers.google.com/api-client-library/python/apis/
服务=发现.build('storage','v1',凭据=凭据)
看起来,t for Python现在只对生产应用程序引擎和dev_appserver.py内部有用,而且它的本地示例已从开发人员文档中删除,取而代之的是Boto:(如果您决定不使用本地GCS仿真,可能最好在本地测试和GCE中都使用Boto

但是,如果您仍然想使用“google.appengine.ext.cloudstorage”,则访问令牌总是会过期,因此您需要手动刷新它。鉴于您的设置,最简单的方法是从Python中调用“gsutil-d ls”,并解析输出以从本地凭据中获取新令牌。您可以使用获取更“正确”的令牌t’fashion,但在这一点上,事情将变得如此迂回,你可能只是在使用Boto。

如果你总是使用“真正的”远程GCS,更新的gcloud可能是最好的库:

Python有多少存储客户端库确实令人困惑。有些库仅用于AE,但在使用dev_appserver.py运行时,它们通常会强制(或至少默认)使用本地模拟Blobstore

似乎gcloud总是使用真正的GCS,这正是我想要的。
它还“神奇地”修复了本地运行时的身份验证。

谷歌图书馆就像火车站的游客一样来来往往。今天(2020年)谷歌云存储应该可以在GCE和GAE标准环境下使用Python 3

在GAE和CGE上,它从环境中获取访问凭据,您可以在本地通过servce帐户JSON文件提供,如下所示:

GOOGLE_APPLICATION_CREDENTIALS=../sa-b0af54dea5e.json

这是针对本地数据存储的。我认为OP试图从本地GAE服务器访问真正的Google云存储。事实上,Google云存储不是Google云数据存储。