Python 导入错误:当我尝试导入BigQuery时,没有名为google.cloud的模块

Python 导入错误:当我尝试导入BigQuery时,没有名为google.cloud的模块,python,python-2.7,google-app-engine,google-bigquery,google-app-engine-python,Python,Python 2.7,Google App Engine,Google Bigquery,Google App Engine Python,当我尝试在Google应用程序引擎中使用此语句时 from google.cloud import big query 它产生错误没有名为Cloud的模块,但是如果我从本地计算机运行它,它运行良好并更新BigQuery表 我想让它成为谷歌应用程序引擎上的一个cron作业,但这不起作用 环境: 我使用的是标准环境及其Python 2.7。我没有运行App Engine SDK开发服务器,我正在部署应用程序live 我的代码是: import time import uuid from go

当我尝试在Google应用程序引擎中使用此语句时

from google.cloud import big query
它产生错误
没有名为Cloud的模块
,但是如果我从本地计算机运行它,它运行良好并更新BigQuery表

我想让它成为谷歌应用程序引擎上的一个cron作业,但这不起作用

环境: 我使用的是标准环境及其Python 2.7。我没有运行App Engine SDK开发服务器,我正在部署应用程序live

我的代码是:

 import time
 import uuid
 from google.cloud import bigquery
 client = bigquery.Client()
 jobid = "jid" + str(uuid.uuid4())
 query = "Select * FROM Table"
 job = client.run_async_query(jobid, query)
当我运行命令
gcloud app browse
时,它会打开一个浏览器并给出以下错误:


原因可能是
appengine标准环境
还不支持
大查询
客户端库。我遇到了这个问题。在这方面还有更多有益的讨论。你也许可以在这里找到解决办法

更新

谢谢你的评论和建议。为了改进上一篇文章,这里有一些额外的信息。由于
应用程序引擎标准环境
不支持
大查询客户端库
,因此与
大查询服务
通信的一种方式是使用
谷歌客户端

为了澄清这一点,以下是使用
GoogleAppClient
的步骤

  • Oauth2client
    GoogleAppClient
    导入模块:

    from googleapiclient.discovery import build
    from oauth2client.client import GoogleCredentials
    
  • 验证和生成服务:

    build('bigquery', 'v2', credentials=GoogleCredentials.get_application_default(), cache_discovery=False)
    
  • 通过作业:这里使用了一个流媒体示例

    row_to_stream = {'keys':keys, 'f1':row['f1'], 'f2':row['f2'], 'ctr':row['ctr'], 'position':row['position']}                    
    insert_all_data = {
     "kind": "bigquery#tableDataInsertAllRequest",
     "skipInvaliedRows": True,
     "ignoreUnknownValues": True,
     'rows':[{
                    'insertId': str(uuid.uuid4()),
                    'json': row_to_stream,
                }]
     }
    
     build('bigquery', 'v2', cache_discovery=False).tabledata().insertAll(
     projectId=projectid,
     datasetId=dataset_id,
     tableId=tableid,
     body=insert_all_data).execute(num_retries=5)
    

  • 希望这是有帮助的

    潜在相关(您可能已在本地系统上安装了它,但未安装在应用程序中):能否提供有关AppEngine设置的更多信息?您是在灵活的还是标准的环境中?您的配置文件是什么样子的?当您在本地测试时,您是直接运行应用程序还是通过AppEngine SDK开发服务器运行应用程序?您好@ChrisThompson我在标准环境及其Python 2.7中。它是同一个文件,我在本地运行时没有更改它。我没有运行App Engine SDK开发服务器,我正在部署应用程序live。嗨@DanCornilescu我已经看过那篇文章,我也在那里安装了库,但它仍然给我相同的错误显示准确的回溯和相关代码。欢迎光临!还有一个步骤可以把这个从“几乎”的答案变成一个很好的答案:请包含问题报告中的相关信息。这个问题可以在任何时候被删除,这将剥夺你当前文章对未来读者的价值。如果你能包括一个特定的策略,将(或可能)解决提问者的问题,那就更好了!这令人困惑。如果库仍然不受支持,为什么文档中包含示例?我想这个库可以从Google计算引擎VM中使用。
    row_to_stream = {'keys':keys, 'f1':row['f1'], 'f2':row['f2'], 'ctr':row['ctr'], 'position':row['position']}                    
    insert_all_data = {
     "kind": "bigquery#tableDataInsertAllRequest",
     "skipInvaliedRows": True,
     "ignoreUnknownValues": True,
     'rows':[{
                    'insertId': str(uuid.uuid4()),
                    'json': row_to_stream,
                }]
     }
    
     build('bigquery', 'v2', cache_discovery=False).tabledata().insertAll(
     projectId=projectid,
     datasetId=dataset_id,
     tableId=tableid,
     body=insert_all_data).execute(num_retries=5)