pip3 --version ImportError

时间:2017-10-17 18:59:21

标签: python-3.x pip

pip3 --version最近引发了一个错误,我在使用pip将软件包安装到我的虚拟环境时遇到了麻烦。这是一个新问题,但我认为可能是因为我的计算机上安装了太多的python版本。

是否有其他人看到此错误被抛出?我之前没有遇到过importlib.util的错误。此外,这个错误最近才悄然上升。据我所知,我还没有做任何改变importlib.util的事情。

Error processing line 1 of /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib-2.0.2-py3.6-nspkg.pth:

  Traceback (most recent call last):
    File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 168, in addpackage
      exec(line)
    File "<string>", line 1, in <module>
  AttributeError: module 'importlib.util' has no attribute 'module_from_spec'

Remainder of file ignored
Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 11, in <module>
    load_entry_point('pip==9.0.1', 'console_scripts', 'pip3')()
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 561, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2631, in load_entry_point
    return ep.load()
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2291, in load
    return self.resolve()
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2297, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/local/lib/python3.6/site-packages/pip/__init__.py", line 26, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "/usr/local/lib/python3.6/site-packages/pip/utils/__init__.py", line 22, in <module>
    from pip.compat import console_to_str, expanduser, stdlib_pkgs
  File "/usr/local/lib/python3.6/site-packages/pip/compat/__init__.py", line 60, in <module>
    from importlib.util import cache_from_source
ImportError: cannot import name 'cache_from_source'

2 个答案:

答案 0 :(得分:1)

我确定3.6中存在'module_from_spec'。您实际上可以指定调用点的确切版本,请尝试一下:

pip3.6 install packagename

答案 1 :(得分:1)

我找到了这个错误的解决方案,但目前还没有确定它出乎意料的原因。我怀疑它是因为我在我的计算机上安装了几个python(不同的版本以及从不同的位置下载,如自制软件,anaconda,OSX发布的版本等等)。

请注意,不同安装的原因不仅是安装python的更新版本,而且因为在我的python教育期间,我已经学习了许多课程,通常建议使用特定的安装方法。

当查看importlib.util时,代码中没有任何明显错误,所以我决定查看anaconda安装的python(两个python 3.6)并比较importlib.util文件。

抛出错误的importlib.util文件的顶部如下所示:

"""Utility code for constructing importers, etc."""
import functools
import sys
import types
import warnings
from contextlib import contextmanager

from . import abc
from ._bootstrap import _find_spec
from ._bootstrap import _resolve_name

但是,anaconda版本的importlib.util文件的顶部如下所示:

"""Utility code for constructing importers, etc."""
from . import abc
from ._bootstrap import module_from_spec
from ._bootstrap import _resolve_name
from ._bootstrap import spec_from_loader
from ._bootstrap import _find_spec
from ._bootstrap_external import MAGIC_NUMBER
from ._bootstrap_external import cache_from_source
from ._bootstrap_external import decode_source
from ._bootstrap_external import source_from_cache
from ._bootstrap_external import spec_from_file_location

from contextlib import contextmanager
import functools
import sys
import types
import warnings

使用IntelliJ我可以确认两个文件中没有其他差异。

注意到._bootstrap_external导入的差异我将anaconda importlib.util文件中的以下行复制并粘贴到usr / bin importlib.util文件中:

from ._bootstrap_external import MAGIC_NUMBER
from ._bootstrap_external import cache_from_source
from ._bootstrap_external import decode_source
from ._bootstrap_external import source_from_cache
from ._bootstrap_external import spec_from_file_location
from ._bootstrap import spec_from_loader
from ._bootstrap import module_from_spec

保存后,pip3功能将恢复。我还没有确定最初导致更改的原因,但是如果其他人有类似的问题我会建议从上面的第三个块复制代码并将其插入importlib.util文件的顶部。