在ubuntu上将python3.4升级到python3.6会破坏pip

时间:2017-03-02 14:30:13

标签: python pip

在我目前拥有python3.4之后,我试图在我的机器上安装python3.6。但是,安装后试图在python3.6下运行pip给出了错误:

Traceback (most recent call last):
  File "pip3", line 7, in <module>
    from pip import main
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 59, in <module>
    from pip.log import logger
  File "/usr/lib/python3/dist-packages/pip/log.py", line 9, in <module>
    import colorama, pkg_resources
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 1520, in <module>
    register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 20, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "pip3", line 7, in <module>
    from pip import main
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 59, in <module>
    from pip.log import logger
  File "/usr/lib/python3/dist-packages/pip/log.py", line 9, in <module>
    import colorama, pkg_resources
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 1520, in <module>
    register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'

互联网上有几条关于遇到错误的评论,但是,它们都没有包含任何实际的解决方案建议。有谁知道如何解决这个问题?

9 个答案:

答案 0 :(得分:22)

我设法解决了这个问题而没有从源头安装任何东西。 这就是我的所作所为:

  1. 首先,为Python3.x安装pip(出于某种奇怪的原因,我没有...)

    $ sudo apt-get install python3-pip
    

    这是旧版本......

    $ pip3 --version
    pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)
    
  2. ...所以升级到最新的

    $ sudo pip3 install --upgrade pip
    

    现在好多了

    $ sudo pip3 --version
    pip 9.0.1 from /usr/local/lib/python3.4/dist-packages (python 3.4)
    
    1. 然后升级virtualenvvwrapper

      $ sudo pip3 install --upgrade virtualenvwrapper
      # ...
      Successfully installed pbr-3.0.1 six-1.10.0 stevedore-1.22.0 virtualenv-15.1.0 virtualenv-clone-0.2.6 virtualenvwrapper-4.7.2
      
    2. 现在创建一个新的virtualenv:

      $ mkvirtualenv -p `which python3.6` <VIRTUALENV_NAME>
      

      pip也有效:

      $ pip install django
      # ...
      Successfully installed django-1.11.2 pytz-2017.2
      
      $ pip freeze
      Django==1.11.2
      pytz==2017.2
      
    3. 注意:现在我意识到它比你要求的要多一些,但是(不知道你到底在哪里失败了)我猜你应该在第2步之后就行了。

答案 1 :(得分:14)

有同样的问题。从源代码安装python有帮助。

# Remove existing python 3.6 if installed with apt
$ sudo apt-get autoremove python3.6

# Get the source
$ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
$ tar xvf Python-3.6.1.tar.xz
$ cd Python-3.6.1

# Configure and install
$ sudo ./configure
$ sudo make altinstall

# Success!
$ pip3.6 -V
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

修改:我发现了pyenv。使安装和管理不同的python版本变得更加容易。试一试!

答案 2 :(得分:3)

我在我的Ubuntu 14.04服务器上用3.6替换了Python 3.4,我遇到了同样的问题。在我的情况下,原因似乎是一个古老的系统点:

$ pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)

我从未安装过python3-pip。相反,我解决了错误如下:

$ sudo pip install --upgrade pip
$ sudo pip install --upgrade virtualenv

答案 3 :(得分:1)

我遇到了同样的问题。我的系统上似乎有pkg_resources的两个版本。

/usr/local/lib/python3.6/site-packages/pkg_resources.py

/usr/lib/python3.6/site-packages/pkg_resources/__init__.py

移动旧版本,以便我的系统可以找到更新版本为我修复它。

mv /usr/local/lib/python3.6/site-packages/pkg_resources.py /usr/local/lib/python3.6/site-packages/pkg_resources.py.back

答案 4 :(得分:1)

我无法通过运行

解决它
python3 get-pip.py

pip3 install --upgrade

因为我已经遇到过pkg_resources.py的问题。从Ubuntu重新安装python3-setuptools软件包没有帮助,因为这似乎仍然安装了最初与Ubuntu系统一起安装的版本(在我的情况下为3.4),但我可以通过手动安装setuptools来解决它

wget https://bootstrap.pypa.io/ez_setup.py -O - | python3

注意:python3指向我的新python版本3.6。如果不适合你那么你需要运行

wget https://bootstrap.pypa.io/ez_setup.py -O - | python3.6

答案 5 :(得分:0)

您可以使用此命令解决此错误。它将更新您的设置工具

python -m ensurepip --upgrade

答案 6 :(得分:0)

我终于通过运行解决了这个问题:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.6 get-pip.py --force-reinstall

此后,我可以使用以下命令安装特定于python3.6的软件包:

python3.6 -m pip install <packagename>

答案 7 :(得分:0)

好吧,看来我遇到了类似的问题,但是安装了distribute作为依赖项的pip

我设法通过这种方式(在env下)安装了依赖项:

 easy_install distribute==0.7.3

我遇到的一个错误:

File "/tmp/pip-build-lvtkw8zs/distribute/pkg_resources.py", line 1518, in <module>
    register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'
 ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-lvtkw8zs/distribute/

答案 8 :(得分:-2)

只需下载文件get-pip.py here并使用此命令:

sudo python3 get-pip.py