python - 如何在Google App Engine中导入Google Cloud语音识别(python)

标签 python google-app-engine google-cloud-platform google-app-engine-python google-speech-api

我想在我的 Google App Engine python 应用程序上使用 google.cloud 库。自从我在本地安装了这个库以来,我的所有测试都在我的本地工作。我原以为 GAE 默认支持它,但它是 not supported .

这是我得到的错误:

from google.cloud import speech
ImportError: No module named cloud

我查看了添加第三方库 https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27

按照说明进行操作后,我遇到了另一个错误。

(/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_lib/versions/1/google/appengine/runtime/wsgi.py:263)
Traceback (most recent call last):
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/main.py", line 18, in <module>
    from google.cloud import speech
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/cloud/speech/__init__.py", line 22, in <module>
    from google.cloud.speech.client import Client
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/cloud/speech/client.py", line 25, in <module>
    from google.cloud.speech._gax import GAPICSpeechAPI
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/cloud/speech/_gax.py", line 17, in <module>
    from google.cloud.gapic.speech.v1.speech_client import SpeechClient
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/cloud/gapic/speech/v1/speech_client.py", line 31, in <module>
    from google.gapic.longrunning import operations_client
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/gapic/longrunning/operations_client.py", line 45, in <module>
    from google.gax import api_callable
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/gax/__init__.py", line 36, in <module>
    import multiprocessing as mp
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_dist/lib/python2.7/multiprocessing/__init__.py", line 65, in <module>
    from multiprocessing.util import SUBDEBUG, SUBWARNING
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_dist/lib/python2.7/multiprocessing/util.py", line 41, in <module>
    from subprocess import _args_from_interpreter_flags
ImportError: cannot import name _args_from_interpreter_flags

我很难理解这个。如果您以前做过此操作,请告诉我如何在 GAE 中设置 google.cloud。

最佳答案

正如在另一篇关于 using Client Libraries in App Engine Standard 的 Stack Overflow 帖子中已经回答的那样,GAE Standard 不支持 Google 客户端库,因此您可以使用 App EngineFlexibleCompute Engine 实例,或者使用 REST API> (其中还有一个可在 App Engine Standard 中运行的 Python 库)。

如果您特别需要使用 google.cloud 库,则必须使用 App Engine Flex,而不是 Standard,但如果您更愿意使用 Standard 环境,下面我将分享通过 Google API Python Client Library 使用 Cloud Speech API 的示例 App Engine Standard 应用程序的代码。该库不是 GAE 标准内置的,因此您必须 vendor it as if it was a third-party library 。为此,您必须在本地应用程序的目录中创建 lib 文件夹以及我在下面共享的 requirements.txt 文件,然后使用以下命令安装此库pip install -t lib/-rrequirements.txt

运行此示例 GAE 应用程序所需的文件:

requirements.txt

google-api-python-client

appengine_config.py

from google.appengine.ext import vendor

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

app.yaml

runtime: python27
api_version: 1
threadsafe: True

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

main.py

import webapp2
from apiclient.discovery import build
from oauth2client.client import GoogleCredentials

class MainPage(webapp2.RequestHandler):
    # Presentation page
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('This is a sample App Engine Standard application working with Cloud Speech API! :)\n\nGo to /speechAPI to transcribe your audio file (you will need to upload it to one of your Cloud Storage buckets)!')

class Recognize(webapp2.RequestHandler):
    # Working with Python API Client Library (NOT NEW CLIENT LIBRARIES)
    def get(self):
        # Add credentials
        credentials = GoogleCredentials.get_application_default()
        service = build('speech', 'v1', credentials=credentials)

        # Methods available in: https://developers.google.com/resources/api-libraries/documentation/speech/v1/python/latest/index.html
        collection = service.speech()

        # Build the data structure JSON-like
        data = {}
        data['audio'] = {}
        data['audio']['uri'] = 'gs://<BUCKET>/<FOLDER>/<FILE>'
        data['config'] = {}
        data['config']['encoding'] = '<ENCODING>'
        data['config']['languageCode'] = '<LANGUAGE_CODE>'
        data['config']['sampleRateHertz'] = <SAMPLE_RATE>

        # Build the request and execute it
        request = collection.recognize(body=data)
        res = request.execute()

        # Webapp2 Response
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write(res)


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

此应用程序也可以在本地开发服务器中运行,因此您可以在将其部署到 App Engine 之前使用命令 dev_appserver.py app.yaml 对其进行测试。

关于python - 如何在Google App Engine中导入Google Cloud语音识别(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48459712/

相关文章:

python - 从 Windows 命令行 : script starts, 启动 Python 脚本失败

python - 在 sqlalchemy 查询中使用 jsonb_array_elements

python - 如何将子列表计算的结果追加到子列表中?

java - 在 dataproc 上运行的 java 软件中升级 google-cloud 库后,库发生冲突

javascript - 谷歌云功能部署失败

python - Flask、Jinja2、 "$"字符上的 Babel 错误

python - PyCharm 导入错误 : No module named googleapiclient

python - Google App Engine - 在模板 HTML 中打印 GQL ID 字段

python - Google App Engine 抛出此 InvalidURL ("nonnumeric port: ' %s'"% host[i+1 :]) exception when I try to deploy. 如何修复它?

kubernetes - 从Java/Node JS将容器镜像部署到kubernetes到Google Cloud