【问题标题】:No module named cloud while using google.cloud import bigquery使用 google.cloud 导入 bigquery 时没有名为 cloud 的模块
【发布时间】:2017-03-21 01:36:34
【问题描述】:

我已经构建了一个应用程序引擎应用程序,以使用 google 应用程序引擎启动器将数据加载到 bigquery 表中,但是当我在本地主机或云上运行它时,我在使用 google.cloud import bigquery 时收到 No module named 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

请让我知道缺少什么或者我在这里做错了什么?

【问题讨论】:

  • 你能分享python -v的输出吗?这可能有助于您查看已加载的模块以及从何处加载。
  • 输出的字符太多,不允许我在这里发布。还有其他方法可以共享我的文件吗?
  • 嗨,我已经设法使用 pastebin 保存了输出,可以通过此链接获得 link

标签: python-2.7 google-app-engine google-bigquery


【解决方案1】:

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

from gcloud import bigquery

如果可行,则说明您运行的是旧版本。要安装最新版本,我建议从 github project 中的主服务器拉取。

【讨论】:

  • 是的,我昨天安装了库,但仍然无法正常工作。我还将导入语句更改为您从 gcloud import bigquery 建议的语句,但它仍然无法正常工作并给我一条错误消息 ImportError: No module named gcloud
【解决方案2】:

这可能有点棘手。 Google Cloud 使用新的 Python 命名空间格式(如果您查看源代码,您会注意到目录结构中没有 __init__.py)。

这在 Python 3.3 中已更改为 PEP-420

幸运的是,在 Python 2.7 中,您可以通过避免隐式导入轻松解决此问题。只需将其添加到文件顶部即可:

from __future__ import absolute_import

希望对您有所帮助。

【讨论】:

    【解决方案3】:

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

    以下是使用 bash 命令的方法:

    export PYTHONPATH=$PYTHONPATH:/<path_to_modules>
    

    或者您可以将其附加到脚本中的路径:

    # if the google/ directory is in the directory /path/to/directory/
    path_to_look_for_module = '/path/to/directory/'
    import sys
    if not path_to_look_for_module in sys.path:
        sys.path.append(path_to_look_for_module)
    

    如果这不起作用,这是我在我的一个项目中找到的用于导入 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
    

    【讨论】:

      【解决方案4】:

      您似乎正试图在Google App Engine's standard environment 中使用Cloud Datastore client library。正如in Google's documentation 所记录的那样,您不应该这样做。相反,要么使用NDB Client Library,要么不使用标准环境。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-24
        • 2020-12-18
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多