无法在 GAE 应用程序中使用 google-cloud
Unable to use google-cloud in a GAE app
我的 Google App Engine 应用程序 (webapp.py
) 中的以下行无法导入 Google Cloud 库:
from google.cloud import storage
出现以下错误:
ImportError: No module named google.cloud.storage
我做了一些研究,发现以下文章很有帮助:
- https://cloud.google.com/appengine/docs/python/tools/using-libraries-python-27#installing_a_library
- https://www.simonmweber.com/2013/06/18/python-protobuf-on-app-engine.html
结合使用上述文章建议的技术,我执行了以下操作:
创建一个 requirements.txt
文件:
google-cloud==0.19.0
使用 pip
导入此库:
pip install -t lib -r requirements.txt
在我的 appengine_config.py
文件中使用以下代码:
import os
import sys
import google
libDir = os.path.join(os.path.dirname(__file__), "lib")
google.__path__.append(os.path.join(libDir, "google"))
sys.path.insert(0, libDir)
任何人都可以阐明我可能缺少什么才能使它正常工作吗?我只是想编写一个 Google App Engine 应用程序,它可以 write/read 来自 Google 云存储,我想在部署之前在本地进行测试。
您的appengine_config.py只需要包含:
from google.appengine.ext import vendor
vendor.add('lib')
我觉得你发布的所有其他内容都很好。
包命名空间似乎已如本 github issue 中所指出的那样进行了更改,但尚未完全修复。您可以安装使用不同命名空间的旧版本 (pip install gcloud
) 并改用此导入语句:
from gcloud import storage
您还应该确保在您的 appengine_config.py 中导入供应商库,如 dyeray 的回答中所指出的。
此问题似乎已在 google-cloud 的 0.20.0 版中得到解决。所以问题中的导入语句应该有效。记得 运行 pip install --upgrade google-cloud
有一个 App Engine specific Google Cloud Storage API 随 App Engine SDK 一起提供,您可以使用它来处理云存储桶。
import cloudstorage as gcs
您没有使用这个无需配置即可加载的内置库有什么原因吗?
看起来唯一需要做的就是将 google-cloud
包含到您的项目 requirements.txt
文件中。
检查这个简单示例是否适合您(您应该不会遇到任何导入错误)。
创建以下文件和 运行 pip install -r requirements.txt -t lib
。我的网站上不需要其他任何东西就可以正常工作。
app.yaml
application: mysample
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: main.app
main.py
import webapp2
from google.cloud import storage
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Hello, World!')
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
appengine_config.py
from google.appengine.ext import vendor
import os
# Third-party libraries are stored in "lib", vendoring will make
# sure that they are importable by the application.
if os.path.isdir(os.path.join(os.getcwd(), 'lib')):
vendor.add('lib')
requirements.txt
google-cloud
你应该将 "import google" 行移动到 sys.path.insert
之后的位置
我 运行 遇到了同样的问题,花了很长时间才解决。
设置 1:
如果您的 app.yaml
设置如下:
runtime: python27
api_version: 1
threadsafe: no
handlers:
- url: /.*
script: main.app
libraries:
- name: jinja2
version: "2.6"
- name: markupsafe
version: "0.15
并且您的 main.py
已将您的脚本注册为应用程序:
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True
@app.route('/')
def hello():
"""Return a friendly HTTP greeting."""
return 'Hello World!'
您应该能够 运行 在 google 云上正常运行。
设置2:我如何运行进入ImportModule error
-
在我的 app.yaml
文件中,我将 script=main.app
替换为 script=main.app
并删除了
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True
来自 main.py file
。结果,appengine_config.py
没有得到 运行 来设置 sys 路径。解决方案是您可以按照设置 1 中的模式或将以下内容添加到您的 main.py
文件中。
from google.appengine.ext import vendor
vendor.add('lib')
那么应用程序应该有正确的导入第三方包的路径。希望能帮助到你。
我的 Google App Engine 应用程序 (webapp.py
) 中的以下行无法导入 Google Cloud 库:
from google.cloud import storage
出现以下错误:
ImportError: No module named google.cloud.storage
我做了一些研究,发现以下文章很有帮助:
- https://cloud.google.com/appengine/docs/python/tools/using-libraries-python-27#installing_a_library
- https://www.simonmweber.com/2013/06/18/python-protobuf-on-app-engine.html
结合使用上述文章建议的技术,我执行了以下操作:
创建一个
requirements.txt
文件:google-cloud==0.19.0
使用
pip
导入此库:pip install -t lib -r requirements.txt
在我的
appengine_config.py
文件中使用以下代码:import os import sys import google libDir = os.path.join(os.path.dirname(__file__), "lib") google.__path__.append(os.path.join(libDir, "google")) sys.path.insert(0, libDir)
任何人都可以阐明我可能缺少什么才能使它正常工作吗?我只是想编写一个 Google App Engine 应用程序,它可以 write/read 来自 Google 云存储,我想在部署之前在本地进行测试。
您的appengine_config.py只需要包含:
from google.appengine.ext import vendor
vendor.add('lib')
我觉得你发布的所有其他内容都很好。
包命名空间似乎已如本 github issue 中所指出的那样进行了更改,但尚未完全修复。您可以安装使用不同命名空间的旧版本 (pip install gcloud
) 并改用此导入语句:
from gcloud import storage
您还应该确保在您的 appengine_config.py 中导入供应商库,如 dyeray 的回答中所指出的。
此问题似乎已在 google-cloud 的 0.20.0 版中得到解决。所以问题中的导入语句应该有效。记得 运行 pip install --upgrade google-cloud
有一个 App Engine specific Google Cloud Storage API 随 App Engine SDK 一起提供,您可以使用它来处理云存储桶。
import cloudstorage as gcs
您没有使用这个无需配置即可加载的内置库有什么原因吗?
看起来唯一需要做的就是将 google-cloud
包含到您的项目 requirements.txt
文件中。
检查这个简单示例是否适合您(您应该不会遇到任何导入错误)。
创建以下文件和 运行 pip install -r requirements.txt -t lib
。我的网站上不需要其他任何东西就可以正常工作。
app.yaml
application: mysample
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: main.app
main.py
import webapp2
from google.cloud import storage
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Hello, World!')
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
appengine_config.py
from google.appengine.ext import vendor
import os
# Third-party libraries are stored in "lib", vendoring will make
# sure that they are importable by the application.
if os.path.isdir(os.path.join(os.getcwd(), 'lib')):
vendor.add('lib')
requirements.txt
google-cloud
你应该将 "import google" 行移动到 sys.path.insert
之后的位置我 运行 遇到了同样的问题,花了很长时间才解决。
设置 1:
如果您的 app.yaml
设置如下:
runtime: python27
api_version: 1
threadsafe: no
handlers:
- url: /.*
script: main.app
libraries:
- name: jinja2
version: "2.6"
- name: markupsafe
version: "0.15
并且您的 main.py
已将您的脚本注册为应用程序:
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True
@app.route('/')
def hello():
"""Return a friendly HTTP greeting."""
return 'Hello World!'
您应该能够 运行 在 google 云上正常运行。
设置2:我如何运行进入ImportModule error
-
在我的 app.yaml
文件中,我将 script=main.app
替换为 script=main.app
并删除了
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True
来自 main.py file
。结果,appengine_config.py
没有得到 运行 来设置 sys 路径。解决方案是您可以按照设置 1 中的模式或将以下内容添加到您的 main.py
文件中。
from google.appengine.ext import vendor
vendor.add('lib')
那么应用程序应该有正确的导入第三方包的路径。希望能帮助到你。