Ubuntu18.04兼容Python2.7、Python3.6、Python3.8以及pip、pip2、pip3问题
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
Ubuntu18.04兼容Python2.7、Python3.6、Python3.8以及pip、pip2、pip3问题的更多相关文章
- 安装python3后使用pip和pip3的区别是什么?
安装python3后使用pip和pip3的区别是什么? 1.其实这两个命令效果是一样的,没有区别: (1)比如安装库numpy,pip3 install numpy或者pip install ...
- Ubuntu18.04安装Python3.6.8
Ubuntu18.04预装了Python3.6.5 终于不再预装Python2.7了 但是系统预装的Python分散安装在各个目录里 以后改起来非常不方便 所以本次安装Python3.6.8 Pyth ...
- ubuntu18.04 + python3 安装pip3
最近在学习python 网络爬虫,正好接触到python的requests模块 我的开发环境是ubuntu18.04+python3,这个系统是默认自带了python3,且版本是python 3.6. ...
- 让你的python程序同时兼容python2和python3
python邮件列表里有人发表言论说「python3在10内都无法普及」.在我看来这样的观点有些过于悲观,python3和python2虽然不兼容,但他们之间差别并没很多人想像的那么大.你只需要对自己 ...
- Ubuntu18.04中安装Python3.7教程
Ubuntu18.04中安装Python3.7教程 链接https://blog.csdn.net/weixin_42056625/article/details/82970358
- Centos7 python3环境搭建 兼容python2.7
Centos7 python3环境搭建 兼容python2.7 安装前提依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel ...
- Ubuntu16.04部署python2和python3共存的Jupyter Notebook
一.安装python和python-pip sudo apt-get install python python3 python-pip python3-pip sudo pip install -- ...
- windows下 兼容Python2和Python3
windows下同时安装了python2和python3时,都可以配置环境变量,如果在命令行里输入python命令,windows会去环境变量里寻找Python的安装位置,如果先找到pytoon2的, ...
- ubuntu14.04 在自带python2.7上安装python3.3.5 可以用但是有问题
一开始写的时候并没有发现这么安装有问题,后来发现问题也不想删了,当个教训,如果想安装从python自带版本换别的版本的话就别接着看了,这么安装有问题.需要进行配置,但是我还不会.其实下面只是差了一步配 ...
随机推荐
- Android Library 发布开源库 JCenter & JitPack 攻略
对于Android 的开源库,一般通过 JCenter 或者 JitPack 发布开源.两种方式均可~ 当你造了一个好玩有用的东西想要分享给大家时,开源出来便是一种好方式~ 一. 上传开源库到 JCe ...
- idea使用maven在install时跳过测试
在右边1处点开maven面板,然后选中2,会发现test已经×掉了,再进行install时将跳过test
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- Nginx+Uwsgi+Django 项目部署到服务器。
首先先说一下思路: 1.本地django项目打包 主要用到的是 python自带的distutils.core 下的 setup,具体代码在下面,主要讲的两个问题是package主要打包为和目录同级的 ...
- CC2530ADC应用
ADC单通道外部电压采集 需要设置一个上机位命令控制字符. 系统时钟初始化——32MHZ晶振 串口0函数初始化——设置串口对应引脚,波特率,清楚中断标志 串口0接收中断响应函数——U0DBUF将控制命 ...
- Day_09【常用API】扩展案例2_测试小字符串在大字符串中出现的次数
分析以下需求,并用代码实现 1.键盘录入一个大字符串,再录入一个小字符串 2.统计小字符串在大字符串中出现的次数 3.代码运行打印格式: 请输入大字符串: woaiheima,heimabutongy ...
- Jmeter5.2.1 三种参数化
Jmeter的相关操作,一定要会参数化,常见的参数化方法有如下几种: 一.用户定义的变量 常应用于设置一些全局变量,包括url.host.port等等 线程组--添加--配置元件--用户定义的变量,添 ...
- Vue.js-Vue的初体验
我是参考https://www.cnblogs.com/kidney/p/6052935.html 这位大神的 最开始接触vue的时候,是他的input框输入的文字和旁边的span展示的文字同步,当时 ...
- 两个有序数组 A1 A2 的合并
/** * 问题6.有序数组 A1 A2 的合并 */ @Test public void orderArrayMerge() { // 两个有序数组 A1 A2 的合并 int[] A1 = {1, ...
- pytest——pycharm中右击运行(run)没有问题,在terminal中运行pytest报错:E ModuleNotFoundError: No module named
参考了这个解决办法:https://blog.csdn.net/qq_36829091/article/details/82180866 我的是Windows,linux的和Windows的解决办法有 ...