Ubuntu安装python3.6并解决系统相关问题

写在前面

本文是为了配置TensorFlow环境时安装推荐的python3.6版本而写

以本人电脑Ubuntu16.04为例,默认自带的是python3.5和python2.7

默认情况下Linux都带两个版本的python:python(对应2.x)和python3(对应2.x),可以在终端中输入python或python3返回对应版本号

那么安装python3.6前,绝对不可直接卸载python3.5或3.7,python3是Linux系统的重要依赖

需要安装python3并进行版本管理

安装python3.6

  1. 查看本机可用的python版本

    $ cd ls /usr/local/lib/
    $ ls
    

    我的系统是Ubuntu16.04,该目录下有两个python

  2. 下载python3.6

    #更新源,并下载ppa源小工具
    $ sudo apt-get update
    $ sudo apt-get install software-properties-common python-software-properties 
    
    #添加ppa源并更新
    $ sudo add-apt-repository ppa:deadsnakes/ppa
    $ sudo apt-get update
    #这一部分,网上教程多使用ppa源“$ sudo add-apt-repository ppa:jonathonf/python-3.6”
    #可能是由于网络错误,本人电脑会报以下错误,所以换了一个ppa源
    #E: Failed to fetch http://ppa.launchpad.net/.....
    #E: Some index files failed to download. They have been ignored, or old ones used instead
    
    #安装python3.6
    $ sudo apt-get install python3.6
    
    #进入目录查看
    $ cd ls /usr/local/lib/
    $ ls
    

    终端返回内容如下

    即python3.6已安装

    此外,也可以自己编译安装

  3. 调整python的优先级(python默认使用python3,python3默认使用python3.6)

    #数字越大者,优先级越高
    #使python3.6优先
    $ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
    $ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
    
    #使python从默认python2改为默认python3
    $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
    $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
    
  4. 解决修改python3小版本后导致的terminal无法打开问题

    由于gi库的原因,自行修改python3版本会导致terminal打不开

    解决方法如下:

    进入xterm

    $ gnome-terminal
    
    #预计有如下返回,用于定位错误
    Traceback (most recent call last):
    File "/usr/bin/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
    File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
    ImportError: cannot import name '_gi'
    

    若是以上

    $ cd /usr/lib/python3/dist-packages/gi
    $ ls
    

    显示如下

    其中两个文件名较长的文件,其名字中的35m指的就是python的原版本号3.5

    我们现在使用的是python3.6,需要把这两个文件复制一份并命名为...36m...

    $ sudo cp _gi.cpython-35m-x86_64-linux-gnu.so _gi.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp _gi_cairo.cpython-35m-x86_64-linux-gnu.so _gi_cairo.cpython-36m-x86_64-linux-gnu.so
    

    PS:xterm里不能用快捷键或右键复制粘贴,可以鼠标拉选ls文件名的一部分,然后按下鼠标中键进行复制粘贴

  5. 测试terminal

    无需重启即可测试,终端应该可以正常打开了

  6. 解决apt-add-repository的报错

    以上安装之后,若输入

    $ sudo add-apt-repository ppa:XXX
    
    #会报以下错误
    Error: No module named 'apt_pkg' 
    

    "apt-add-repository"命令其实是一个python3脚本,所以解决办法和之前terminal问题的解决办法类似

    解决办法如下:

    #cd到相关脚本目录
    $ cd /usr/lib/python3/dist-packages/
    
    #将相关命令都拷一份python3.6的
    $ sudo cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp brlapi.cpython-35m-x86_64-linux-gnu.so brlapi.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp _cffi_backend.cpython-35m-x86_64-linux-gnu.so _cffi_backend.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp cups.cpython-35m-x86_64-linux-gnu.so cups.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp cupsext.cpython-35m-x86_64-linux-gnu.so cupsext.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp _dbus_bindings.cpython-35m-x86_64-linux-gnu.so _dbus_bindings.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp _dbus_glib_bindings.cpython-35m-x86_64-linux-gnu.so _dbus_glib_bindings.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp hpmudext.cpython-35m-x86_64-linux-gnu.so hpmudext.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp pcardext.cpython-35m-x86_64-linux-gnu.so pcardext.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp pycurl.cpython-35m-x86_64-linux-gnu.so pycurl.cpython-36m-x86_64-linux-gnu.so
    $ sudo cp scanext.cpython-35m-x86_64-linux-gnu.so scanext.cpython-36m-x86_64-linux-gnu.so
    
    

安装Anaconda

  1. 安装Anaconda

    首先下载python3版本的Anaconda:

    Anaconda下载地址

    下载后用终端运行,出现Do you accept the license terms?时yes,一路yes即可

    安装位置建议默认(/home/用户名/anaconda3),否则后面添加环境变量时候需要修改语句

  2. 重启terminal

  3. 验证Anaconda安装成功

    $ conda
    

    安装成功并成功添加到环境变量,则应有如下返回

    usage: conda-script.py [-h] [-V] command …
    conda is a tool for managing and deploying applications, environments and packages.
    ...
    ...
    conda commands available from other packages:
    ...
    ...
    

对系统's python和anaconda's python做alias管理

  1. 查看python

    $ whereis python
    
  2. 打开并编辑环境变量alias

    $ gedit ~/.bashrc
    

    在文件末尾加上几行,并保存退出

    #added for conda to manage python edition
    export PATH="/home/xxx/anaconda3/bin:$PATH"
    export PATH="$PATH:$HOME/bin"
    alias py27="/usr/bin/python2.7" 
    alias py36="/usr/bin/python3.6"
    alias pyana37="/home/xxx/anaconda3/bin/python3.7"
    

    其中xxx改为用户名,若anaconda选择的是默认安装位置,只需要修改用户名即可

    说明一下:

    • /usr/bin下面的python是系统的python
    • /home/xxx/anaconda3/bin/下面的python是anaconda安装的python

    修改后需要执行source使配置文件生效

    $ source ~/.bashrc
    
  3. 修改了默认shell为zsh的同学需要注意!!!!

    • 问题:本人在这里犯了一个错误:在 linux 上利用 Anaconda 同时配置了多个版本的 python ,在修改了~/.bashrc 文件希望更改系统默认的 python,而后在 zsh 上执行了 source ~/.bashrc 。这会导致直接zsh直接跳转base模式,命令行出现错乱,重新打开terminal后恢复

    • 解决方法

      应该编辑zshrc而不是bashrc,即

      $ gedit ~/.zshrc
      $ source ~/.zshrc
      
    • 测试效果:

      可见前两个python来自Linux,后一个来自Anaconda,且GCC版本也不一样

posted @ 2020-06-18 01:42  Tzbubble  阅读(522)  评论(0编辑  收藏  举报