6

我正在尝试使用来自 Google Natural Language API 的示例代码来获取情绪分数。但是,每次运行代码时,我都会收到“ImportError:无法导入名称语言”。第一行的错误。

我已经 pip 安装了库,尝试卸载并重新安装,在控制台上制作了凭据(API 显示已启用)并查看了本教程并完成了答案中的这些步骤:Google 情绪分析 - ImportError:无法导入名称语言。它没有帮助。还有什么我可以尝试的吗?

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types

client = language.LanguageServiceClient()

text = u'Hello, world!'
document = types.Document(
    content=text,
    type=enums.Document.Type.PLAIN_TEXT)

sentiment = client.analyze_sentiment(document=document).document_sentiment

print('Text: {}'.format(text))
print('Sentiment: {}, {}'.format(sentiment.score, sentiment.magnitude))

我也用正确的路径将它粘贴到我的终端中。

export GOOGLE_APPLICATION_CREDENTIALS="/....(my path)/service_key.json"

堆栈跟踪:

Traceback (most recent call last):
  File "lang.py", line 3, in <module>
    from google.cloud import language
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/google/cloud/language.py", line 17, in <module>
    from google.cloud.language_v1 import LanguageServiceClient
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/google/cloud/language_v1/__init__.py", line 17, in <module>
    from google.cloud.language_v1 import types
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/google/cloud/language_v1/types.py", line 18, in <module>
    from google.api_core.protobuf_helpers import get_messages
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/google/api_core/__init__.py", line 20, in <module>
    from pkg_resources import get_distribution
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3161, in <module>
    @_call_aside
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3145, in _call_aside
    f(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3189, in _initialize_master_working_set
    for dist in working_set
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3189, in <genexpr>
    for dist in working_set
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2715, in activate
    declare_namespace(pkg)
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2274, in declare_namespace
    _handle_ns(packageName, path_item)
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2209, in _handle_ns
    loader.load_module(packageName)
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pkgutil.py", line 246, in load_module
    mod = imp.load_module(fullname, self.file, self.filename, self.etc)
  File "/.../lang.py", line 3, in <module>
    from google.cloud import language
ImportError: cannot import name language
4

4 回答 4

10

这似乎是这个问题的重复:

Google 情绪分析 - ImportError:无法导入名称语言

对我来说,升级 google-api-python-client 和 google-cloud 还不够

相反,解决我的问题的是:

!pip install google-cloud-language

此外,当您升级 google api 库时,会出现与 awsebcli 库(来自 AWS)不兼容的错误。

于 2019-02-08T17:58:11.617 回答
2

尝试升级 pip:

python -m pip install --upgrade pip

然后升级谷歌包:

pip install --upgrade google-api-python-client
pip install --upgrade google-cloud
于 2019-02-22T11:17:46.970 回答
2

如果使用 Google Cloud Functions,请确保在 requirements.txt 选项卡中指定了 google-cloud-language:在此处输入图像描述

于 2019-03-26T03:43:58.530 回答
2

说明:

如果您查看堆栈跟踪,则导入google.cloud.language实际上是有效的,它不是循环的。堆栈跟踪中的第二个和第三个项目langauge.py成功地请求下面的项目,最终委托给google.api_core(这是我们所有这些库背后的运行时)。

跟踪中的第五行是有趣的:它对应于第 20 行google/api_core/__init__.py,它是from pkg_resources import get_distribution。之后发生的一切都是为了使导入工作;因为它没有,所以会ImportError冒泡,并且之前的导入级联失败。

可能的解决方案:

确保您的pipsetuptools是最新的。命名空间打包是出了名的棘手,所以你必须有一个相当新的版本。只是发出pip install --upgrade setuptools pip

戈尔迪安解决方案:

你考虑过 Python 3 吗?:-)

故障排除:

如果这不起作用(并且 Python 3 不是一个选项),那么我们需要知道的下一件事是最终失败是什么。曲目中倒数第二个调用是对 的调用imp.load_module(fullname, self.file, self.filename, self.etc)。我们需要知道这些值是什么才能进一步排除故障。要获取它们,import pdb ; pdb.set_trace()请在导入失败的代码之前立即添加。这将把你扔到调试器中。使用n(next) 和s(step into function) 浏览代码(您可以通过在 REPL 中键入它们来获取变量值等)。如果您可以打印要专门导入的内容的值,我们可以进一步为您提供帮助。

于 2018-04-30T16:48:50.930 回答