Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 2.7 使用google.cloud导入bigquery时没有名为cloud的模块_Python 2.7_Google App Engine_Google Bigquery - Fatal编程技术网

Python 2.7 使用google.cloud导入bigquery时没有名为cloud的模块

Python 2.7 使用google.cloud导入bigquery时没有名为cloud的模块,python-2.7,google-app-engine,google-bigquery,Python 2.7,Google App Engine,Google Bigquery,我已经使用google app engine launcher构建了一个app engine应用程序来将数据加载到bigquery表中,但是当我在本地主机或云上运行它时,在日志文件中使用google.cloud导入bigquery错误消息时,我会得到一个名为cloud的无模块。我已经安装了谷歌云客户端库,但它仍然给我同样的错误。请看下面我使用的代码 ---main.py文件包含 import argparse import time import uuid from google.cloud

我已经使用google app engine launcher构建了一个app engine应用程序来将数据加载到bigquery表中,但是当我在本地主机或云上运行它时,在日志文件中使用google.cloud导入bigquery错误消息时,我会得到一个名为cloud的无模块。我已经安装了谷歌云客户端库,但它仍然给我同样的错误。请看下面我使用的代码

---main.py文件包含

import argparse
import time
import uuid

from google.cloud import bigquery

def load_data_from_gcs(dataset_name, table_name, source):
    bigquery_client = bigquery.Client()
    dataset = bigquery_client.dataset(dataset_name)
    table = dataset.table(table_name)
    job_name = str(uuid.uuid4())

    job = bigquery_client.load_table_from_storage(
        job_name, table, source)

    job.begin()

    wait_for_job(job)

    print('Loaded {} rows into {}:{}.'.format(
        job.output_rows, dataset_name, table_name))


def wait_for_job(job):
    while True:
        job.reload()
        if job.state == 'DONE':
            if job.error_result:
                raise RuntimeError(job.error_result)
            return
        time.sleep(1)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('Test')
    parser.add_argument('mytable')
    parser.add_argument('gs://week/geninfo.csv')

    args = parser.parse_args()

    load_data_from_gcs(
        args.dataset_name,
        args.table_name,
        args.source)
--app.yaml文件包含以下代码

application: mycloudproject
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.app

请告诉我这里缺少什么或我是否做错了什么?

您确定已更新到库的最新版本吗?pip安装的版本可能已过期。以前,模块导入为:

from gcloud import bigquery

如果这样做有效,那么您运行的是旧版本。要安装最新版本,我建议从中的主控面板中拉出。

这可能有点棘手。GoogleCloud使用了新的Python名称空间格式(如果您查看源代码,您会注意到目录结构中没有
\uuu init\uuu.py

这在Python3.3中用

幸运的是,在Python2.7中,您可以通过避免隐式导入轻松地解决这个问题。只需将其添加到文件的顶部:

从未来导入绝对导入


希望有帮助。

找到包含
google/cloud/…
的目录,并将该目录添加到PYTHONPATH中,以便python能够找到它。有关如何添加到PYTHONPATH的详细信息,请参阅。它概述了两种常见的方法:

下面介绍如何使用bash命令执行此操作:

export PYTHONPATH=$PYTHONPATH:/<path_to_modules>
如果这不起作用,下面是我在导入Google Appengine模块的一个项目中找到的一些代码:

def fixup_paths(path):
    """Adds GAE SDK path to system path and appends it to the google path
    if that already exists."""
    # Not all Google packages are inside namespace packages, which means
    # there might be another non-namespace package named `google` already on
    # the path and simply appending the App Engine SDK to the path will not
    # work since the other package will get discovered and used first.
    # This emulates namespace packages by first searching if a `google` package
    # exists by importing it, and if so appending to its module search path.
    try:
        import google
        google.__path__.append("{0}/google".format(path))
    except ImportError:
        pass

    sys.path.insert(0, path)

# and then call later in your code:
fixup_paths(path_to_google_sdk)
from google.cloud import bigquery

看起来您正在尝试在中使用。如文件所述,您不应该这样做。相反,请使用或不使用标准环境

是的,我昨天安装了这个库,但仍然不起作用。我还将import语句更改为您从gcloud import bigquery中建议的语句,但该语句仍然不起作用,并向我发送了一条错误消息ImportError:没有名为gcloud的模块可能重复的,您可以共享
python-v
的输出吗?这可能有助于您查看加载的模块以及从何处加载的模块。输出上的字符太多,不允许我在此处发布。有没有其他方法来共享我的文件?嗨,我已经设法使用pastebin保存了输出,可以通过此链接访问
def fixup_paths(path):
    """Adds GAE SDK path to system path and appends it to the google path
    if that already exists."""
    # Not all Google packages are inside namespace packages, which means
    # there might be another non-namespace package named `google` already on
    # the path and simply appending the App Engine SDK to the path will not
    # work since the other package will get discovered and used first.
    # This emulates namespace packages by first searching if a `google` package
    # exists by importing it, and if so appending to its module search path.
    try:
        import google
        google.__path__.append("{0}/google".format(path))
    except ImportError:
        pass

    sys.path.insert(0, path)

# and then call later in your code:
fixup_paths(path_to_google_sdk)
from google.cloud import bigquery