我的Google App Engine应用中的以下行(webapp.py
)无法导入Google Cloud库:
from google.cloud import storage
出现以下错误:
ImportError: No module named google.cloud.storage
我做了一些研究,发现以下文章很有帮助:
结合上述文章提出的技术,我做了以下几点:
创建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云存储写入/读取的Google App Engine应用程序,我想在部署之前在本地进行测试。
答案 0 :(得分:5)
看起来唯一需要的是将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
答案 1 :(得分:3)
App Engine SDK随附App Engine specific Google Cloud Storage API,您可以使用它来处理云存储分区。
import cloudstorage as gcs
您是否有理由不使用此内置库,无需加载配置?
答案 2 :(得分:1)
您的appengine_config.py只需要包含:
from google.appengine.ext import vendor
vendor.add('lib')
你发布的所有其他内容对我来说都很好。
答案 3 :(得分:1)
软件包名称空间似乎已按照此this answer中的指示进行了更改,并且尚未完全修复。您可以安装使用不同命名空间的旧版本(from gcloud import storage
)。请改用此导入语句:
pip install --upgrade google-cloud
您还应确保在appengine_config.py中导入供应商库,如magicray的答案所述。
问题似乎已经解决,因为google-cloud版本为0.20.0。所以问题中的import语句应该有效。只需记得运行/var/www/test# ls -l /usr/bin/php*
lrwxrwxrwx 1 root root 21 Okt 6 2015 /usr/bin/php -> /etc/alternatives/php
-rwxr-xr-x 1 root root 9065192 Jul 26 10:33 /usr/bin/php5
-rwxr-xr-x 1 root root 4422704 Sep 18 10:38 /usr/bin/php7.0
lrwxrwxrwx 1 root root 28 Okt 6 2015 /usr/bin/php-config -> /etc/alternatives/php-config
-rwxr-xr-x 1 root root 5237 Jul 26 10:33 /usr/bin/php-config5
lrwxrwxrwx 1 root root 24 Okt 6 2015 /usr/bin/phpize -> /etc/alternatives/phpize
-rwxr-xr-x 1 root root 4730 Jul 26 10:33 /usr/bin/phpize5
答案 4 :(得分:0)
你应该移动&#34;导入谷歌&#34;排到sys.path.insert
之后的位置答案 5 :(得分:0)
我遇到了同样的问题并花了很长时间才解决它。
设置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!'
你应该能够在谷歌云上运行得很好。
设置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')
然后,应用程序应该有正确的路径来导入第三方软件包。希望能帮助到你。