导入错误:无法从“importlib”导入名称“元数据”

新手上路,请多包涵

在 python ( Python 3.7.5 (default, Oct 31 2019, 15:18:51) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 ) 会话下,在 Anaconda 提示符下启动,我收到错误

>>> import nbconvert
Traceback (most recent call last):
  File "C:\Users\user1\Anaconda\lib\site-packages\jsonschema__init__.py", line 31, in <module>
    from importlib import metadata
ImportError: cannot import name 'metadata' from 'importlib' (C:\Users\user1\Anaconda\lib\importlib__init__.py)

实际上, metadata 不在 importlib

 >>> import importlib
>>> dir(importlib)
['_RELOADING', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__import__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_bootstrap', '_bootstrap_external', '_imp', '_r_long', '_w_long', 'abc', 'find_loader', 'import_module', 'invalidate_caches', 'machinery', 'reload', 'sys', 'types', 'util', 'warnings']

是我找到的唯一参考,提到在 python 3.8 _中的某些情况下_(奇怪?)


编辑 1 :我现在可以删除错误。有一个更改可以做到这一点:在 PYTHONPATH 环境变量中删除一个字符串,该字符串导致 OSError: [WinError 123] ...>>> import nbconvert 之后。删除/添加该字符串,删除/恢复错误。

我不确定我在激活的 virtualenv(我有 python 3.8.0)中所做的 conda install nbconvert 是否也发挥了作用;在此安装之前我没有测试。

更重要的是,我无法弄清楚 OSError一条线 from importlib import metadata 之间的联系。


编辑 2 :我有一个带有 python 3.8.0 的 virtualenv,其中 importlib 也没有 metadata 。所以我仍然无法弄清楚为什么存在一行 from importlib import metadata

 C:\> conda activate opencv
C:\> conda list
...
importlib_metadata        1.1.0                    py38_0    defaults
...
nbconvert                 5.6.1                    py38_0    defaults
...
C:\> python
Python 3.8.0 (default, Nov  6 2019, 16:00:02) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import importlib
>>> dir(importlib)
['_RELOADING', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__import__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_bootstrap', '_bootstrap_external', '_imp', '_pack_uint32', '_unpack_uint32', 'find_loader', 'import_module', 'invalidate_caches', 'reload', 'sys', 'types', 'warnings']
>>> import nbconvert
>>>

原文由 sancho.s ReinstateMonicaCellio 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

该问题是由库 jsonschema 最近发生的变化引起的。查看 https://github.com/Julian/jsonschema/blob/master/jsonschema/init.py ,您会发现 2019 年 9 月 26 日发生了变化,将 pkg_resources 更改为 importlib_metadata 作为 Python <3.8 的后备。但是,这似乎不是开箱即用的。

要解决此问题,您必须将 jsonschema 包降级到更改之前的版本:

 pipenv install jsonschema==3.0.2

可以在此处找到更多信息: https ://blog.gaborschulz.com/my-jupyter-notebook-stopped-working.html

原文由 Jane Kathambi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题