Обновление python3.4 до python3.6 на ubuntu breaks pip

Я пытаюсь установить python3.6 на свою машину после того, как в настоящее время у меня есть python3.4. Однако после установки, пытающейся запустить pip под python3.6, возникает ошибка:

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'

В Интернете было несколько комментариев об этой ошибке, однако ни одно из них не содержит каких-либо фактических предложений разрешения. Кто-нибудь знает, как я могу это исправить?

Ответ 1

Мне удалось решить это, не устанавливая ничего из источников. Вот что я сделал:

  • Сначала установите pip для Python3.x(по какой-то странной причине у меня его не было)...

    $ sudo apt-get install python3-pip
    

    Это старая версия...

    $ pip3 --version
    pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)
    
  • ... поэтому обновите его до последнего

    $ 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
    

Примечание. Теперь я понимаю это немного больше, чем вы просили, но (не зная, где именно вы потерпели неудачу), я думаю, вы должны быть в порядке после шага 2.

Ответ 2

Имела та же проблема. Помогла установка 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 намного проще. Попробуй!

Ответ 3

Я заменил Python 3.4 на 3.6 на своих серверах Ubuntu 14.04, и у меня была та же проблема. В моем случае причина казалась древней системой:

$ 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

Ответ 4

У меня была такая же проблема. Кажется, у меня было две версии 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

Ответ 5

Я не мог решить это, запустив

python3 get-pip.py

или же

pip3 install --upgrade

потому что у меня уже были проблемы с pkg_resources.py. Кроме того, повторная установка пакета python3-setuptools из Ubuntu не помогла, так как по-прежнему кажется, что он установлен для версии, первоначально установленной с системой 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

Ответ 6

Вы можете решить эту ошибку, используя эту команду. он обновит ваш setuptools

python -m ensurepip --upgrade

Ответ 7

Просто скачайте файл get-pip.py здесь и используйте эту команду:

sudo python3 get-pip.py