当前位置: 首页 > 知识库问答 >
问题:

如何在AppEngine for Python中导入BigQuery

唐炳
2023-03-14

我试图运行一个BigQuery查询从谷歌AppEngine(部署)使用Python 2.7,但我看到这个错误在StackDriver的错误报告:

没有命名为云的模块

这是我的代码(main.py):

from __future__ import absolute_import

import webapp2
from google.cloud import bigquery


class MainPage(webapp2.RequestHandler):
    def get(self):

        # Instantiates a client
        bigquery_client = bigquery.Client()

        # The name for the new dataset
        dataset_name = 'my_new_set'

        # Prepares the new dataset
        dataset = bigquery_client.dataset(dataset_name)

        # Creates the new dataset
        dataset.create()

        # Remove unwanted chars
        #self.response.write(str(container))


app = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)

这是我的(app.yaml):

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: main.app

错误消息将使我假设没有导入BigQuery的库。但是,如果此代码部署在AppEngine中,那么默认情况下库不应该已经安装在AppEngine中吗?

试图解决这个问题

尝试#1

我发现这篇文章提到了一个类似的问题。建议将这一行添加到文件的顶部。我已将该行添加到文件中,但问题仍然存在:

from __future__ import absolute_import

来源:使用google时没有名为cloud的模块。云导入bigquery

尝试#2

我在笔记本电脑中本地安装了BigQuery的客户端:

pip install google-cloud-bigquery==0.22.1

我还在“lib”文件夹中安装了同一个客户端,以便在部署后将其上传到AppEngine:

pip install --target='lib' google-cloud-bigquery==0.22.1

最后,还需要使用以下内容创建名为"appengine_config.py"的文件:

# appengine_config.py
from google.appengine.ext import vendor

    # Add any libraries install in the "lib" folder.
    vendor.add('lib')

资料来源:https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27

然而,这一尝试也没有成功。错误消息更改为以下内容:

*File "/base/data/home/apps/p~experimenting-1130/2.400173726395247238/lib/httplib2/__init__.py", line 352: print('%s:' % h, end=' ', file=self._fp) ^ SyntaxError: invalid syntax
at <module> (/base/data/home/apps/p~experimenting-1130/2.400173726395247238/lib/google_auth_httplib2.py:23)
at <module> (/base/data/home/apps/p~experimenting-1130/2.400173726395247238/lib/google/cloud/_helpers.py:31)
at <module> (/base/data/home/apps/p~experimenting-1130/2.400173726395247238/lib/google/cloud/bigquery/_helpers.py:21)
at <module> (/base/data/home/apps/p~experimenting-1130/2.400173726395247238/lib/google/cloud/bigquery/__init__.py:26)
at get (/base/data/home/apps/p~experimenting-1130/2.400173726395247238/main.py:75)
at dispatch (/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py:545)
at dispatch (/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py:547)
at __call__ (/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py:1077)
at default_dispatcher (/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py:1253)
at __call__ (/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py:1505)
at __call__ (/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py:1511)*

如何在AppEngine(部署)中正确导入BigQuery库?

谢谢你的帮助。

共有1个答案

居乐池
2023-03-14

下面的解决方案对我很有效,而不必使用来自_future _; import absolute u import的。有三个主要步骤要遵循。

尽管根据文档,这听起来有悖常理

[...]Python客户端库没有安装在应用引擎Python运行时环境中,[因此]它们必须像第三方库一样销售到您的应用程序中。

所以为了使用google。cloud必须将库代码复制到项目的源目录中。库代码和应用程序代码一起上载到App Engine。

要将库代码复制到项目中,请执行以下操作:

>

mkdir lib

将google api python客户端和google云库复制到刚才创建的文件夹中。我在下面的示例中使用pip。

pip install -t lib/ --upgrade google-api-python-client
pip install -t lib/ --upgrade google-cloud

>

  • 创建一个名为appengine\u config的文件。py与您的应用程序位于同一文件夹中。yaml文件
  • 编辑appengine\u配置。py并包括以下代码

    # appengine_config.py
    from google.appengine.ext import vendor
    
    # Add any libraries install in the "lib" folder.
    vendor.add('lib') 
    

    >

    # other requirements
    google-api-python-client
    google-cloud
    

    你现在应该可以使用谷歌的。部署应用程序后,云导入bigquery不会出现问题。

    有关详细信息,请参阅使用第三方库

  •  类似资料:
    • 问题内容: 我已经为EE开发人员安装了eclipse ide,并且收到了的导入错误 我右键单击项目文件夹->单击属性->单击Java构建路径->添加库-> JRE系统库, 但是显示的依赖项已经导入。如何导入javax.json包? 问题答案: 如果使用Maven,请将此依赖项添加到您的 对于Gradle,请将其添加到您的

    • 问题内容: 如何在Eclipse中导入jar 问题答案: 你可以通过右键单击Project→Build Path→Configure Build Path在Eclipse中添加一个jar。在“库”选项卡下,单击“添加jar”或“添加外部JAR”,然后提供jar。 上述解决方案显然是一种“快速”解决方案。但是,如果你正在从事一个需要将文件提交到源代码控制存储库的项目,我建议将Jar文件添加到源代码控

    • 问题内容: 我正在尝试运行以下简单代码来检索SSL证书: 但我收到错误消息: 我知道我必须导入OpenSSL。但是我不知道怎么做?以及从哪里获得OpenSSL?我从https://pypi.python.org/pypi/pyOpenSSL下载了一个名为pyOpenSSL的模块, 其中包含两个文件夹:pyOpenSSL-0.15.1.dist- info和OpenSSL。当我尝试添加导入OpenS

    • 我已经为EE开发人员安装了EclipseIDE,并且收到了一个导入错误 我右键单击了项目文件夹- 但是显示的依赖关系已经导入。如何导入javax.json包?

    • 我在WebPack上使用jquery时遇到了一个问题。我的代码: 当编译上述代码时,控制台抛出此错误 vendor.js:1未捕获的引用Error:未在vendor.js:1中定义webpackJsonp

    • 问题内容: 在Eclipse中如何导入 javax.servlet API? 问题答案: 确保你使用了eclipse-jee版本 确保你安装了Servlet容器,例如:tomcat