Ubuntu18.04兼容Python2.7、Python3.6、Python3.8以及pip、pip2、pip3问题
此为记录我重装Ubuntu后安装Python的过程
安装Python3.8#
其他系统安装: CentOS 7上安装Python 3.9
目前Ubuntu自带的Python版本为3.6,但官方都出3.8了,能不试一下新的功能吗?
第一步:下载Python3.8的源码#
点击这里打开网址
选择下载tgz包(“Download Gzipped source tarball ”),解压
第二步:更新包列表并安装构建Python源所需的包#
输入这三个命令:
第三步:安装Python3.8#
解压tgz
包, 并cd
到Python解压目录,然后输入以下命令
到这里Python3.8已经安装完成,但是只能输入python3.8
打开,这里等到下面一并解决
安装pip
和pip3
, 直接输入下面两行代码,安装
此时,ubuntu中已经有了: python2.7
、python3.6
、python3.8
、pip
、pip2
、pip3
解决兼容问题#
我的想法是:python
命令是可以动态切换Python2.7
、Python3.6
、Python3.8
的,而且pip
和pip3
会动态指向我切换的python版本上(pip2就让他指向Python2.7吧)
第一步:解决Python版本切换问题#
目前网上已经有很好的教程了,使用update-alternatives
命令来为整个系统更改python 版本的方法更好。
第一步: 找到各个Python的路径,使用which命令
第二步: 记录好他们所在路径,我这里是
/usr/bin/python2.7 /usr/bin/python3.6 /usr/local/bin/python3.8
第三步: 重点,使用update-alternatives
命令
这里的最后一个参数是优先级,数越大越高,倒数第二个参数是各个版本Python所在位置,即我们上一步记录的东西
检验是否成功, 输入:
选择并切换Python版本,至此,Python版本兼容性问题已经解决
第二步:解决pip、pip2、pip3指向问题#
当我切换到python3.8输入pip -V
,查看pip指向哪里之时,会报错“from pip import main ImportError: cannot import name 'main'
听网上说,主要是由于ubuntu升级pip的版本后导致的
没有这个问题的跳过即可
我的做法是修改pip文件: 结合两个pip文件, 然后作python版本判断, 执行对应代码即可
注:一定要备份pip文件,包括pip、pip2、pip3、pip3.8(Python3.8的)
输入echo $PATH
,可以看到环境变量:
不巧的是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
作者:忞翛
出处:https://www.cnblogs.com/lczmx/p/12428041.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
欢迎各位大佬评论交流。可以的话,不妨点一下推荐。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具