Как я могу настроить pip3, используя python3.6, а не python3.4 в Ubuntu 14.04? - PullRequest
0 голосов
/ 21 ноября 2018

По умолчанию python3 в Ubuntu 14.04 имеет значение 3.4.3, но я хочу использовать 3.6.3.

Я следовал приведенным ниже командам для установки 3.6.3:

$ sudo apt-get update
$ sudo apt-get install build-essential libpq-dev libssl-dev openssl libffi-dev zlib1g-dev
$ sudo apt-get install python3-pip python3-dev

$ sudo add-apt-repository ppa:jonathonf/python-3.6
$ sudo apt-get update
$ sudo apt-get install python3.6

3.6.3 был тогда доступен на моем Ubuntu:

$ which python3.6
/usr/bin/python3.6

Конечно, python3 все еще указывал на 3.4.3:

$ ls -la /usr/bin/python3
/usr/bin/python3 -> /usr/bin/python3.4

pip3 был доступен, но он использовал3.4.3 вместо 3.6.3 (что я хотел):

$ pip3 --version
pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)

Я думал, что обновление /usr/bin/python3 решит проблему, поэтому я настроил символическую ссылку python3, указав 3.6.3:

$ sudo unlink /usr/bin/python3
$ sudo ln -s /usr/bin/python3.6 /usr/bin/python3
$ ls -la /usr/bin/python3
/usr/bin/python3 -> /usr/bin/python3.6

Но pip3 больше не работал: (

$ pip3 --version
Traceback (most recent call last):
  File "/usr/bin/pip3", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 1479, 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 "/usr/bin/pip3", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 1479, in <module>
    register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'

ОБНОВЛЕНО

Я попытался с некоторыми предложениями:

$ sudo python3.6 -m pip

и

$ curl https://bootstrap.pypa.io/get-pip.py | sudo -H python3.6

Но он показал очень похожие результаты:

Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.6/runpy.py", line 142, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/usr/lib/python3.6/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  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 "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
  File "/usr/share/python-wheels/setuptools-3.3-py2.py3-none-any.whl/pkg_resources.py", line 1479, 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

Как я могу решить проблему?

1 Ответ

0 голосов
/ 21 ноября 2018

Привет, настоящая проблема описана здесь: https://stackoverflow.com/a/41722610/7933710 TLDR: использование ppa в старых системах Ubuntu не согласовано.

Чтобы восстановить вашу систему, вам придется удалить python3.6:

apt-get remove --purge python3.6
add-apt-repository -r ppa:jonathonf/python-3.6

Затем загрузите исходный код и соберите его из исходного кода и подготовьте систему к сборке:

wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz

Теперь подготовьте систему к сборке:

apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev  libncursesw5-dev xz-utils tk-dev

Всеэти шаги взяты из руководства https://realpython.com/installing-python/#compiling-python-from-source

Теперь сконфигурируйте, сделайте, сделайте altinstall (важно)

tar xvf Python-3.6.7.tgz
cd Python-3.6.7/
./configure --enable-optimizations --with-ensurepip=install
make -j 8
make altinstall

-j 8 означает работу на 8 ядрах.Конечно, если у вас меньше, используйте соответствующий номер.В любом случае это не приведет к сбою.

Теперь проверьте установку, запустив

python3.6 -V
which python3.6

Скопируйте путь python3.6, он должен быть либо /usr/bin/python3.6, либо/usr/local/bin/python3.6

Теперь вы можете использовать update-alternatives для управления всеми версиями Python на вашем компьютере

ls /usr/bin/python*  # e.g. /usr/bin/python2.7 /usr/bin/python3.4 /usr/bin/python3.6
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1
update-alternatives --install /usr/bin/python python /usr/local/bin/python3.6 2

Число 2 обозначает приоритет запуска Python на вашем компьютере.В этом случае 2> 1, поэтому вы предпочитаете python3.6.Если вы хотите перейти на версию 3.4, вы можете просто запустить update-alternatives --config python, который является интерактивным конфигуратором.

Теперь вы можете использовать python -m pip -V для проверки правильности работы pip.Вы также можете использовать pip3.6 для установки пакетов.

...