解決PackageNotFoundError:XXXX異常

注意:以下基於python 3.7.0

報錯示例:

Error importing optional module nbformat
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\Release\jsonschema\__init__.py", line 31, in <module>
    from importlib import metadata
ImportError: cannot import name 'metadata' from 'importlib' (C:\ProgramData\Anaconda3\Lib\importlib\__init__.py)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\Release\_plotly_utils\optional_imports.py", line 28, in get_module
    return import_module(name)
  File "C:\ProgramData\Anaconda3\Lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\Administrator\Desktop\Release\nbformat\__init__.py", line 32, in <module>
    from .validator import validate, ValidationError
  File "C:\Users\Administrator\Desktop\Release\nbformat\validator.py", line 12, in <module>
    from jsonschema import ValidationError
  File "C:\Users\Administrator\Desktop\Release\jsonschema\__init__.py", line 33, in <module>
    import importlib_metadata as metadata
  File "C:\Users\Administrator\Desktop\Release\importlib_metadata\__init__.py", line 591, in <module>
    __version__ = version(__name__)
  File "C:\Users\Administrator\Desktop\Release\importlib_metadata\__init__.py", line 553, in version
    return distribution(distribution_name).version
  File "C:\Users\Administrator\Desktop\Release\importlib_metadata\__init__.py", line 526, in distribution
    return Distribution.from_name(distribution_name)
  File "C:\Users\Administrator\Desktop\Release\importlib_metadata\__init__.py", line 194, in from_name
    raise PackageNotFoundError(name)
importlib_metadata.PackageNotFoundError: importlib_metadata

這是由importlib_metadata引發的PackageNotFoundError異常,查看importlib_metadata\__init__.py line 194:

    @classmethod
    def from_name(cls, name):
        """Return the Distribution for the given package name.

        :param name: The name of the distribution package to search for.
        :return: The Distribution instance (or subclass thereof) for the named
            package, if found.
        :raises PackageNotFoundError: When the named package's distribution
            metadata cannot be found.
        """
        for resolver in cls._discover_resolvers():
            dists = resolver(DistributionFinder.Context(name=name))
            dist = next(dists, None)
            if dist is not None:
                return dist
        else:
            raise PackageNotFoundError(name)

註釋中給出說明,當package的distribution metadata無法找到時,拋出PackageNotFoundError異常。
轉到Anaconda3\Lib\site-packages目錄,可以看到,每個包都會附帶一個以“-info”爲後綴的文件夾,如importlib_metadata,對應importlib_metadata-1.5.0.dist-info,上面的異常就是因爲缺少importlib_metadata-1.5.0.dist-info文件夾導致的,只要將該文件夾拷貝至importlib_metadata的相同目錄,就可以解決,而無需在python環境中pip安裝這個包。
同理,其他包缺少了相應的-info文件夾也會導致這個異常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章