ubuntu16.04安装python3.6.5遇到的一些坑的记录

ubuntu16.04安装python3.6.5遇到的一些坑的记录

        因为ubuntu16.04上python3版本是3.5.2,而我又是强迫症,就想用python3.6,因此开始折腾起来,不得不说,坑有点多,所以把安装过程记录下来,避免更多人踩到和我一样的坑

1.首先是安装python3.6.5
    安装命令为:

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

安装完成后,我们输入python3.6验证下安装成功了没,如果如下图所示,则为安装成功。

python3.6

但是,此时系统默认的python3还是python3.5.2,输入python3,显示如下:

python3.5

此时,只要把python3.6的优先级设置的比python3.5高就行了,设置的命令如下:

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

查看设置的结果的命令为:

sudo update-alternatives --config python3

结果如下图所示:

python3

说明python3.6的优先级已经比python3.5的高了,直接回车就可以了。

现在再输入python3,已经是python3.6.5了:

python3

接下来升级pip3:

sudo apt-get install python3-pip  #如果已经安装了pip3忽略这一条
sudo pip3 install --upgrade pip

查看是否安装成功:

pip3 -V

不幸的事情发生了….

直接抛出错误:

ImportError: cannot import name main

经过一波搜索,找到了解决办法(感谢accumulate_zhang,博客地址:https://blog.csdn.net/accumulate_zhang/article/details/80269313),解决办法是修改pip3文件里的代码:

打开pip3文件,打开命令:

sudo gedit /usr/bin/pip3

把原来的

from pip import main
if __name__ == '__main__':
    sys.exit(main())

替换为:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

再次输入 pip3 -V,发现已经升级到最新版本了:

pip3

正当想万事大吉的时候,又出了问题,在启动器中无法双击打开终端(terminal)….,经过一波搜索,找到了解决方法。就是把python3.5中的一些依赖复制一份给3.6,解决办法是:

cd /usr/lib/python3/dist-packages/gi/
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.一般可以直接用命令 sudo apt-get update更新的,所以这一部分做不做都行,看个人)

cd /usr/lib/python3/dist-packages/

把里面和python3.5相关的全部复制了一遍,命令如下:

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-35m-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

一波操作完,“软件和更新”可以打开了,但是软件更新器,提示如下:

但是奇怪的是,点击确定后,会检查更新…不是很懂这波操作。

最后一点,建议大家也做了,刚开始没发现,后来安装TensorFlow的时候发现的问题,具体报错的原因:

ModuleNotFoundError: No module named 'gdbm'

解决办法是:

sudo cp /usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.so /usr/lib/python3.6/lib-dynload/_gdbm.cpython-36m-x86_64-linux-gnu.so

至此,目前遇到的坑就是这些。

猜你喜欢

转载自blog.csdn.net/u012328159/article/details/80957264