我试图运行一个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库?
谢谢你的帮助。
下面的解决方案对我很有效,而不必使用来自_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