Ubuntu18.04兼容Python2.7、Python3.6、Python3.8以及pip、pip2、pip3问题

此为记录我重装Ubuntu后安装Python的过程

安装Python3.8

 目前Ubuntu自带的Python版本为3.6,但官方都出3.8了,能不试一下新的功能吗?

第一步:下载Python3.8的源码

点击这里打开网址

选择下载tgz包(“Download Gzipped source tarball ”),解压

第二步:更新包列表并安装构建Python源所需的包

输入这三个命令

sudo apt update

sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget

sudo apt-get install make

第三步:安装Python3.8

cd 到Python解压目录,然后输入以下命令

sudo ./configure --enable-optimizations

sudo make altinstall

到这里Python3.8已经安装完成,但是只能输入python3.8打开,这里等到下面一并解决

安装pip和pip3

直接输入,安装 

sudo apt install python-pip
sudo apt install python3-pip

此时,ubuntu给我安装了Python2.7、pip、pip2、pip3

解决兼容问题

  我的想法是:Python2.7、Python3.6、Python3.8之间可以随便切换,而且pip和pip3会动态指向我切换的Python版本上(pip2就让他指向Python2.7吧)

第一步:解决Python版本切换问题

目前网上已经有很好的教程了,使用update-alternatives 来为整个系统更改Python 版本的方法更好。

找到各个Python的路径,使用which命令

which python2.7
which python3.6
which python3.8

记录好他们所在路径,我这里是

/usr/bin/python2.7

/usr/bin/python3.6

/usr/local/bin/python3.8

接下来就是重点了,使用update-alternatives命令:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2

sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.8 3

  这里的最后一个参数是优先级,数越大越高,倒数第二个参数是各个版本Python所在位置,即我们上一步记录的东西

  输入:

    sudo update-alternatives --config python

 选择并切换Python版本,至此,Python版本兼容性问题已经解决

 

第二步:解决pip、pip2、pip3指向问题

 当我切换到Python3.8输入pip -V,查看pip指向哪里之时,会报错“ from pip import main ImportError: cannot import name 'main' ”

听网上说,主要是由于ubuntu升级pip的版本后导致的,

我的做法是修改pip文件

注:一定要备份pip文件,包括pip、pip2、pip3、pip3.8(Python3.8的)

输入echo $PATH,可以看到环境变量:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

不巧的是pip和pip3在/usr/local/bin目录下,而/usr/bin目录下也有pip和pip3,由优先级知道输入pip命令会优先执行/usr/local/bin目录下的。

所以我这里修改的是/usr/local/bin下的pip、pip3、pip3.8和/usr/bin下的pip2,假如想改/usr/bin下的pip和pip3的话可以直接cp过去(注意先备份)

下面是修改的代码,可以直接复制粘贴过去

pip

#!/usr/bin/python
# GENERATED BY DEBIAN import sys # Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
if sys.version_info.major == 3 and sys.version_info.minor == 8:
from pip import __main__ if __name__ == '__main__':
sys.exit(__main__._main())
else:
from pip import main
if __name__ == '__main__':
sys.exit(main())

pip2

#!/usr/bin/python2.7
# GENERATED BY DEBIAN import sys # Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
sys.exit(main())

pip3和pip3.8

#!/usr/bin/python
# -*- coding:utf-8 -*-
# GENERATED BY DEBIAN import sys
import os # Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
if sys.version_info.major == 3:
if sys.version_info.minor == 8:
from pip import __main__ if __name__ == '__main__':
sys.exit(__main__._main())
else:
from pip import main if __name__ == '__main__':
sys.exit(main())
else:
msg = "当前Python版本为Python%s.%s,不能使用pip3!" % (sys.version_info.major, sys.version_info.minor)
os.system("echo %s" % msg)
os.system("""echo "请使用'update-alternatives --config python' 切换Python版本" """)

    

参考资料:

https://www.jb51.net/article/163112.htm

https://blog.csdn.net/qq_38522539/article/details/80678412

  

我的github

我的博客

我的笔记

Ubuntu18.04兼容Python2.7、Python3.6、Python3.8以及pip、pip2、pip3问题的更多相关文章

  1. 安装python3后使用pip和pip3的区别是什么?

    安装python3后使用pip和pip3的区别是什么? 1.其实这两个命令效果是一样的,没有区别: (1)比如安装库numpy,pip3  install  numpy或者pip  install   ...

  2. Ubuntu18.04安装Python3.6.8

    Ubuntu18.04预装了Python3.6.5 终于不再预装Python2.7了 但是系统预装的Python分散安装在各个目录里 以后改起来非常不方便 所以本次安装Python3.6.8 Pyth ...

  3. ubuntu18.04 + python3 安装pip3

    最近在学习python 网络爬虫,正好接触到python的requests模块 我的开发环境是ubuntu18.04+python3,这个系统是默认自带了python3,且版本是python 3.6. ...

  4. 让你的python程序同时兼容python2和python3

    python邮件列表里有人发表言论说「python3在10内都无法普及」.在我看来这样的观点有些过于悲观,python3和python2虽然不兼容,但他们之间差别并没很多人想像的那么大.你只需要对自己 ...

  5. Ubuntu18.04中安装Python3.7教程

    Ubuntu18.04中安装Python3.7教程 链接https://blog.csdn.net/weixin_42056625/article/details/82970358

  6. Centos7 python3环境搭建 兼容python2.7

    Centos7 python3环境搭建 兼容python2.7 安装前提依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel ...

  7. Ubuntu16.04部署python2和python3共存的Jupyter Notebook

    一.安装python和python-pip sudo apt-get install python python3 python-pip python3-pip sudo pip install -- ...

  8. windows下 兼容Python2和Python3

    windows下同时安装了python2和python3时,都可以配置环境变量,如果在命令行里输入python命令,windows会去环境变量里寻找Python的安装位置,如果先找到pytoon2的, ...

  9. ubuntu14.04 在自带python2.7上安装python3.3.5 可以用但是有问题

    一开始写的时候并没有发现这么安装有问题,后来发现问题也不想删了,当个教训,如果想安装从python自带版本换别的版本的话就别接着看了,这么安装有问题.需要进行配置,但是我还不会.其实下面只是差了一步配 ...

随机推荐

  1. 使用python实现模拟掷骰子数据分析

    Data:2020/4/8 主题:模拟实现掷骰子数据分析 编译环境:pycharm 库:pygal 说明: code 1:创建一个掷骰子类对象,类方法获得掷骰子随机数1-6,默认6个面,模拟20次将结 ...

  2. 002_python的in,while else,格式化输出,逻辑运算符,int与bool转换,编码

    数据 1.什么是数据? x=10,10是我们要存储的数据 2.为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3.数据类型 数字 字符串 列表 元组 字典 集合 ...

  3. NLTK的安装与简单测试

    1.NLTK简介 Natural Language Toolkit,自然语言处理工具包,在NLP领域中,最常使用的一个Python库.NLTK是一个开源的项目,包含:Python模块,数据集和教程,用 ...

  4. 小心了!Kubernetes自动化操作工具将让你失去工作

    运行Kubernetes的人已经花费太多时间在操作上,企业正在考虑为Kubernetes编写自动化工具. 尽管IT部门的大部分职位都会增加,但职业顾问说,计算机操作员预计会减少.这个角色涉及运行She ...

  5. C#/VB.NET 将SVG图片添加到PDF、转换为PDF

    以下内容介绍在C# 程序中如何将SVG图片添加到PDF文档.以及如何将SVG图片转换为PDF文档. 一.环境准备 先下载PDF类库工具,Spire.PDF for .NET hotfix 6.5.6及 ...

  6. 轻松扩展机器学习能力:如何在Rancher上安装Kubeflow

    随着机器学习领域不断发展,对于处理机器学习的团队来说,在1台机器上训练1个模型已经有些难以为继,并且现在业界的共识是机器学习已经不仅仅是简单的模型训练. 在模型训练之前.过程中和之后,需要进行许多活动 ...

  7. JSP中System.out.println()与out.println()区别

    1.out.println()输出到客户端. 在out.println()中,out是response的实例,是以response为对象进行流输出的,即将内容输出到客户端. 如果在JSP页面中使用Sy ...

  8. django安装及其他模块导入

    django安装 python项目第三方模块配置 pip3 list------查看当前pip安装的第三方模块

  9. 模拟SWPU邮件登录页面

    模拟SWPU邮件登录页面设计流程 一.开发工具准备 本次开发该页面时使用的开发工具为vscode—— 在下载安装完成后,需要下载各类插件——如汉化.通过浏览器打开网页插件等. 二.开发过程 首先,打开 ...

  10. 王艳 201771010127《面向对象程序设计(java)》第六周学习总结

    实验六 继承定义与使用 一:理论部分: 第五章:继承类. 1.继承:已有类来构建新类的一种机制.档定义了一个新类继承另一个类时,这个新类就继承了这个类的方法和域,同时在新类中添加新的方法和域以适应新的 ...