【问题标题】:ImportError: cannot import name _args_from_interpreter_flagsImportError:无法导入名称 _args_from_interpreter_flags
【发布时间】:2017-11-24 04:02:03
【问题描述】:

对于应用程序,我必须使用 Google Vision API。 我可以使用from google.cloud import vision 并在我的计算机中进行图像分析。 但是,当我在开发服务器上部署我的应用程序时出现错误:

File "C:\MyApp\detect.py", line 26, in <module>
    from google.cloud import vision
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\__init__.py", line 34, in <module>
    __version__ = get_distribution('google-cloud-vision').version
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\setuptools-0.6c11\pkg_resources.py", line 311, in get_distribution
    if isinstance(dist,Requirement): dist = get_provider(dist)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\setuptools-0.6c11\pkg_resources.py", line 197, in get_provider
    return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\setuptools-0.6c11\pkg_resources.py", line 666, in require
    needed = self.resolve(parse_requirements(requirements))
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\setuptools-0.6c11\pkg_resources.py", line 565, in resolve
    raise DistributionNotFound(req)  # XXX put more info here
DistributionNotFound: google-cloud-vision

当我创建包含以下内容的 appengine_config.py 文件时:

from google.appengine.ext import vendor
vendor.add('C:\Anaconda2\Lib\site-packages')

我收到错误:

File "C:\Users\MyApp\detect.py", line 26, in <module>
    from google.cloud import vision
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\__init__.py", line 36, in <module>
    from google.cloud.vision.client import Client
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\client.py", line 23, in <module>
    from google.cloud.vision._gax import _GAPICVisionAPI
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\_gax.py", line 17, in <module>
    from google.cloud.gapic.vision.v1 import image_annotator_client
  File "C:\Anaconda2\lib\site-packages\google\cloud\gapic\vision\v1\image_annotator_client.py", line 31, in <module>
    from google.gax import api_callable
  File "C:\Anaconda2\lib\site-packages\google\gax\__init__.py", line 36, in <module>
    import multiprocessing as mp
  File "C:\Anaconda2\lib\multiprocessing\__init__.py", line 65, in <module>
    from multiprocessing.util import SUBDEBUG, SUBWARNING
  File "C:\Anaconda2\lib\multiprocessing\util.py", line 41, in <module>
    from subprocess import _args_from_interpreter_flags
ImportError: cannot import name _args_from_interpreter_flags

当我尝试以下链接中提到的 hack 时:
https://github.com/GoogleCloudPlatform/google-cloud-python/issues/1893
https://github.com/googleapis/gax-python/issues/149
https://gist.github.com/nilleb/419122f2f6f1228650dd2dccbd01c5af

我收到错误:

File "C:\Users\MyApp\detect.py", line 11, in <module>
    class DummyProcessing(ModuleType):
NameError: name 'ModuleType' is not defined

然后我按照这里的说明进行操作:https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27#copying_a_third-party_library
并使用了这个命令:

pip install -t lib google-cloud-vision==0.28.0

并更新appengine_config.py文件:

from google.appengine.ext import vendor
vendor.add('lib')

我收到错误:

File "C:\Users\MyApp\detect.py", line 26, in <module>
    from google.cloud import vision
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\__init__.py", line 36, in <module>
    from google.cloud.vision.client import Client
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\client.py", line 23, in <module>
    from google.cloud.vision._gax import _GAPICVisionAPI
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\_gax.py", line 17, in <module>
    from google.cloud.gapic.vision.v1 import image_annotator_client
  File "C:\Anaconda2\lib\site-packages\google\cloud\gapic\vision\v1\image_annotator_client.py", line 31, in <module>
    from google.gax import api_callable
  File "C:\Anaconda2\lib\site-packages\google\gax\__init__.py", line 36, in <module>
    import multiprocessing as mp
  File "C:\Anaconda2\lib\multiprocessing\__init__.py", line 65, in <module>
    from multiprocessing.util import SUBDEBUG, SUBWARNING
  File "C:\Anaconda2\lib\multiprocessing\util.py", line 41, in <module>
    from subprocess import _args_from_interpreter_flags
ImportError: cannot import name _args_from_interpreter_flags

然后我按照这里的说明进行操作: Using gcloud-python in GAE

并使用了这个命令:

pip install -t vendor google-cloud-vision==0.28.0

我从这里复制了 appengine_config.pydarth.py 文件: https://github.com/dhermes/test-gcloud-on-gae/tree/8a850fb8b5676ca03e07c4f9dcfba5efb8c77b0a/application

我收到错误:

File "C:\Users\MyApp\detect.py", line 26, in <module>
    from google.cloud import vision
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\__init__.py", line 36, in <module>
    from google.cloud.vision.client import Client
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\client.py", line 23, in <module>
    from google.cloud.vision._gax import _GAPICVisionAPI
  File "C:\Anaconda2\lib\site-packages\google\cloud\vision\_gax.py", line 17, in <module>
    from google.cloud.gapic.vision.v1 import image_annotator_client
  File "C:\Anaconda2\lib\site-packages\google\cloud\gapic\vision\v1\image_annotator_client.py", line 31, in <module>
    from google.gax import api_callable
  File "C:\Anaconda2\lib\site-packages\google\gax\__init__.py", line 36, in <module>
    import multiprocessing as mp
  File "C:\Anaconda2\lib\multiprocessing\__init__.py", line 65, in <module>
    from multiprocessing.util import SUBDEBUG, SUBWARNING
  File "C:\Anaconda2\lib\multiprocessing\util.py", line 41, in <module>
    from subprocess import _args_from_interpreter_flags
ImportError: cannot import name _args_from_interpreter_flags

我不知道下一步该做什么。我现在完全被卡住了。

【问题讨论】:

  • 你试过最后一个链接中给出的“肮脏的黑客”吗?听起来bug的根本原因是一样的。
  • 我试过并更新了我的问题。看看吧。

标签: python google-cloud-platform google-cloud-vision


【解决方案1】:

回溯表明该库安装在您的本地 python 系统 (C:\Anaconda2\lib\site-packages\google\cloud\vision) 中,而不是安装在应用程序本身中,因为它应该安装在标准 env GAE 应用程序中。

来自Google Cloud Vision API Client Library for Python

App 引擎

由于App Engine Python runtime environment中没有安装Python客户端库,所以它们必须是vendored into your application,就像第三方库一样。

来自Copying a third-party library

使用不在内置列表中的第三方库 与运行时捆绑的库:

  • 创建一个目录来存储您的第三方库,例如lib/

    mkdir lib
    
  • 使用带有-t &lt;directory&gt; 标志的 pip(版本 6 或更高版本)将库复制到您在上一步中创建的文件夹中。为了 示例:

    pip install -t lib/ <library_name>
    

    ...

遵循整个销售程序并重试。

但是从您引用的issue 149 的评论中,您可能必须等待该问题得到解决:

@nilleb App Engine 标准尚不支持 grpc。

【讨论】:

  • 只要您在appengine_config.py 中有匹配的配置,您是否调用应用程序的库目录libvendor 都没有关系。但不幸的是,我的怀疑得到了证实——阻塞问题实际上是这个版本的视觉客户端库使用了标准环境中尚不支持的 gax/multiprocessing。唯一想到的是在添加此类支持之前尝试旧版本(如果你能找到的话)。不知道是否有意义 - 如果您需要添加任何功能/修复,因为该版本可能不需要。
  • 我试过pip install -t vendor google-cloud-vision==0.24.0,但我得到了同样的错误。我应该尝试哪个版本?还有一件事,当我使用appengine_config.py 时,为什么它仍在`C:\Anaconda2\lib` 中寻找from google.cloud import vision
  • 不确定哪个版本(我还没有玩过那个库) - 尝试挖掘这些问题,也许你可以找出在哪个版本中添加了 gax/multiprocessing 并选择前一个。或者盲目尝试其他版本:) 我认为您可能仍然在appengine_config.py 中有lib,这与vendor 目录不匹配。我建议回到lib 而不是vendor(你可以重命名目录)——它与官方文档相匹配,有助于减少混淆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2014-10-10
  • 2014-09-20
  • 2014-08-28
  • 2014-06-10
  • 2016-05-16
  • 2019-05-25
相关资源
最近更新 更多