【发布时间】:2019-12-06 15:39:42
【问题描述】:
在 Anaconda 提示符下启动的 python (Python 3.7.5 (default, Oct 31 2019, 15:18:51) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32) 会话下,我收到错误
>>> 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']
This 是我找到的唯一参考资料,提到它在 python 3.8 中观察到在某些情况下(奇怪?)。
编辑 1:
我现在能够消除错误。
有一个更改可以做到这一点:删除PYTHONPATH 环境变量中的一个字符串,该字符串在>>> import nbconvert 之后导致OSError: [WinError 123] ...。
删除/添加该字符串,删除/恢复错误。
我不确定我在激活的 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
>>>
【问题讨论】:
-
@jonrsharpe - 见编辑过的 OP。 1) 我无法弄清楚为什么在
importlib没有metadata的分布中存在from importlib import metadata行。它显然会失败。 2) 我有一个带有 python 3.8.0 的 virtualenv。完全一样的事情发生了,这更奇怪。 3)奇怪的是(对我来说)删除PYTHONPATH中的一个麻烦的字符串会删除错误(尽管它没有回答上面的两个问题)。
标签: python importerror python-importlib