【问题标题】:ImportError: cannot import name 'opentype' on new installationImportError:无法在新安装时导入名称“opentype”
【发布时间】:2018-05-11 16:35:35
【问题描述】:

我刚刚创建了一个谷歌云计算引擎,安装了带有 pip 和 pip3 的 google-cloud 包,并且在使用 python3 启动脚本时遇到了以下错误

    from google.cloud import bigquery
  File "/usr/local/lib/python3.5/dist-packages/google/cloud/bigquery/__init__.py", line 35, 
in <module>
    from google.cloud.bigquery.client import Client
  File "/usr/local/lib/python3.5/dist-packages/google/cloud/bigquery/client.py", line 36, in
 <module>

(more traceback lines..)

    from pyasn1_modules.rfc2459 import Certificate
  File "/usr/local/lib/python3.5/dist-packages/pyasn1_modules/rfc2459.py", line 20, in <modu
le>
    from pyasn1.type import opentype
ImportError: cannot import name 'opentype'

在计算引擎上安装了以下软件包:

pyasn1==0.1.9
pyasn1-modules==0.2.1
google-cloud==0.30.0
google-cloud-bigquery==0.28.0

这可能是什么问题?

【问题讨论】:

  • 您可以尝试将pyasn1升级到最新的pypi.python.org/pypi/pyasn1,因为在我的机器上我有最新的并且在导入时没有问题。

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


【解决方案1】:

发布我的解决方案以防它对其他人有所帮助 - 这为我解决了问题:

pip install --upgrade google-auth-oauthlib

更多细节在这里讨论:https://www.raspberrypi.org/forums/viewtopic.php?f=114&t=198933&p=1241439#p1241439

【讨论】:

    【解决方案2】:

    您的 pyasn1 似乎有问题,因此您可以尝试安装较新的版本(最新版本是 0.4.2),甚至手动重新安装:

    sudo apt-get --reinstall install python-pyasn1 python-pyasn1-modules
    

    如果您在 virtualenv 中,请改用:

    pip install pyasn1 pyasn1-modules
    

    【讨论】:

    • 我在 raspberrypi 3 上遇到了类似的问题,但这个解决方案似乎不起作用。我在这里发布了一个问题:raspberrypi.org/forums/…
    • 使用不带 sudo 的相同命令,因为就我所见,您在 virtualenv 中运行代码,然后您必须在其中安装库virtualenv,不在外部系统中。
    • 我的错。我仔细检查了一下,为了在 virtualenv 中安装,apt-get 不起作用。如果您在 virtualenv 中,请尝试使用此命令:pip install pyasn1 pyasn1-modules
    • @Yandrak3 谢谢你——我最后发现我需要的是pip install --upgrade google-auth-oauthlib
    【解决方案3】:

    FWIW - 有同样的问题 - 以上都不起作用。我最终发现,如果我在sudo 下这样做,它确实 工作。

    追踪原始文件 - 我发现我有一个 ~/.local 目录,其中有一个 pyasn1 目录,它试图从中获取文件,但 opentype.py 没有 出现在那里。当我删除整个目录时 - 它开始工作了。

    我认为这是某种不完整且过时的缓存???

    【讨论】: