Mil*_*ton 5 google-app-engine python-2.7 google-bigquery
我正在尝试使用Python 2.7从Google AppEngine(已部署)运行BigQuery查询,但我在StackDriver的错误报告中看到此错误:
ImportError:没有名为cloud的模块
这是我的代码(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)
Run Code Online (Sandbox Code Playgroud)
这是我的(app.yaml):
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: main.app
Run Code Online (Sandbox Code Playgroud)
该错误消息将使我假设没有导入BigQuery的库.但是,如果在AppEngine中部署此代码,默认情况下不应该在AppEngine中安装库吗?
试图解决问题
尝试#1
我发现这篇帖子引用了类似的问题.建议是将此行添加到文件的顶部.我将该行添加到我的文件中,但问题仍然存在:
from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)
来源: 使用google.cloud导入bigquery时没有名为cloud的模块
尝试#2
我在笔记本电脑中本地安装了BigQuery的客户端:
pip install google-cloud-bigquery==0.22.1
Run Code Online (Sandbox Code Playgroud)
我还在"lib"文件夹中安装了相同的客户端,以便在部署后将其上载到AppEngine:
pip install --target='lib' google-cloud-bigquery==0.22.1
Run Code Online (Sandbox Code Playgroud)
最后,还需要使用此内容创建名为"appengine_config.py"的文件:
# appengine_config.py
from google.appengine.ext import vendor
# Add any libraries install in the "lib" folder.
vendor.add('lib')
Run Code Online (Sandbox Code Playgroud)
资料来源: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)*
Run Code Online (Sandbox Code Playgroud)
如何在AppEngine中正确导入BigQuery库(已部署)?
谢谢你的帮助.
以下解决方案对我有用,无需使用from __future__ import absolute_import
. 需要遵循三个主要步骤。
尽管这听起来违反直觉,但根据文档
[...]Python 客户端库未安装在 App Engine Python 运行时环境中,[因此]它们必须像第三方库一样供应到您的应用程序中。
因此为了使用google.cloud
必须将库代码复制到项目的源目录中。库代码与应用程序代码一起上传到 App Engine。
要将库代码复制到您的项目中:
在项目根文件夹中创建一个目录(例如lib/)来存储第三方库
mkdir lib
Run Code Online (Sandbox Code Playgroud)将 google-api-python-client 和 google-cloud 库复制到您刚刚创建的文件夹中。我在下面的示例中使用 pip。
pip install -t lib/ --upgrade google-api-python-client
pip install -t lib/ --upgrade google-cloud
Run Code Online (Sandbox Code Playgroud)appengine_config.py
与您的文件位于同一文件夹中的app.yaml
文件编辑appengine_config.py
并包含以下代码
# appengine_config.py
from google.appengine.ext import vendor
# Add any libraries install in the "lib" folder.
vendor.add('lib')
Run Code Online (Sandbox Code Playgroud)编辑您的requirements.txt
文件并包含添加的库的名称
# other requirements
google-api-python-client
google-cloud
Run Code Online (Sandbox Code Playgroud)部署应用程序后,您现在应该可以from google.cloud import bigquery
毫无问题地使用。
有关更多信息,请参阅使用第三方库
归档时间: |
|
查看次数: |
1931 次 |
最近记录: |