如何在Ubuntu 14.04上使用python3.6而不是python3.4调整pip3? [英] How can I adjust pip3 using python3.6 not python3.4 on Ubuntu 14.04?

查看:396
本文介绍了如何在Ubuntu 14.04上使用python3.6而不是python3.4调整pip3?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Ubuntu 14.04上的默认python33.4.3,但我想改用3.6.3.

Default python3 on Ubuntu 14.04 is of 3.4.3 but I want to use 3.6.3 instead.

我按照下面的命令安装了3.6.3:

I followed commands below to install 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

然后在我的Ubuntu上可以使用

3.6.3:

3.6.3 was then available on my Ubuntu:

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

可以肯定的是,python3仍指向3.4.3:

For sure, python3 was still pointing to 3.4.3:

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

pip3可用,但它使用3.4.3而不是3.6.3(我想要的):

pip3 was available but it used 3.4.3 instead of 3.6.3 (what I wanted):

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

我认为更新/usr/bin/python3将解决此问题,因此我确实调整了python3符号链接,使其指向3.6.3:

I thought updating /usr/bin/python3 would solve the issue so I did adjusting the python3 symbolic link making it point to 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

但是它显示出非常相似的输出:

But it showed very similar output:

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

我该如何解决这个问题?

How can I solve the issue?

推荐答案

您好,这里描述了真正的问题: https://stackoverflow .com/a/41722610/7933710 TLDR:在较旧的Ubuntu系统上使用ppa不一致.

Hi the real problem is described here: https://stackoverflow.com/a/41722610/7933710 TLDR: Using a ppa on older Ubuntu systems is not consistent.

要修复系统,您必须删除python3.6:

To repair your system you'll have to remove python3.6:

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

然后下载源代码并从源代码进行构建,并为构建系统做准备:

Then download the source and build from source and prepare the system for building:

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

All these steps are from the guide here https://realpython.com/installing-python/#compiling-python-from-source

现在配置,制作,进行altinstall(重要)

Now configure, make, make altinstall (important)

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个内核上运行.当然,如果您的数量较少,请使用适当的数字.在任何情况下都不会导致崩溃.

The -j 8 means run on 8 cores. Of course if you have less then use the appropriate number. It will not cause a crash in any case.

现在通过运行来验证安装

Now verify the install by runnning

python3.6 -V
which python3.6

复制python3.6的路径,它应该是/usr/bin/python3.6/usr/local/bin/python3.6

Copy the path of python3.6, it should be either /usr/bin/python3.6 or /usr/local/bin/python3.6

您现在可以使用update-alternatives来管理计算机上的所有python版本

You can now use the update-alternatives to manage all python versions on your machine

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,它是一个交互式配置器.

The number 2 signifies the priority for running python on your machine. In this case 2 > 1, so you'll prefer python3.6. If you want to change to version 3.4 you can just run update-alternatives --config python which is an interactive configurator.

现在,您可以使用python -m pip -V来验证pip是否正常工作.您还可以使用pip3.6安装软件包.

Now you can use python -m pip -V to verify pip is working correctly. You can also use pip3.6 to install packages.

这篇关于如何在Ubuntu 14.04上使用python3.6而不是python3.4调整pip3?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆