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
-
查看本机可用的python版本
$ cd ls /usr/local/lib/ $ ls
我的系统是Ubuntu16.04,该目录下有两个python
-
下载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已安装
此外,也可以自己编译安装
-
调整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
-
解决修改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文件名的一部分,然后按下鼠标中键进行复制粘贴
-
测试terminal
无需重启即可测试,终端应该可以正常打开了
-
解决
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
-
安装Anaconda
首先下载python3版本的Anaconda:
下载后用终端运行,出现
Do you accept the license terms?
时yes,一路yes即可安装位置建议默认(/home/用户名/anaconda3),否则后面添加环境变量时候需要修改语句
-
重启terminal
-
验证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管理
-
查看python
$ whereis python
-
打开并编辑环境变量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
-
修改了默认shell为zsh的同学需要注意!!!!
-
问题:本人在这里犯了一个错误:在 linux 上利用 Anaconda 同时配置了多个版本的 python ,在修改了
~/.bashrc
文件希望更改系统默认的 python,而后在zsh
上执行了source ~/.bashrc
。这会导致直接zsh直接跳转base模式,命令行出现错乱,重新打开terminal后恢复 -
解决方法
应该编辑zshrc而不是bashrc,即
$ gedit ~/.zshrc $ source ~/.zshrc
-
测试效果:
可见前两个python来自Linux,后一个来自Anaconda,且GCC版本也不一样
-