【Linux】如何在ubuntu下安装任意版本python

一、现有的几种安装方式优缺点分析

最近在编译一个工程的时候遇到问题,看到报错信息指向的是一个py文件,第一反应就是python版本问题,网上一搜果然是需要把版本从3.5升级到3.7。

网上关于安装python的文章有很多,基本方法分为两种

1. 方法一添加新的源

添加新的源,然后用标准的apt install的方式安装
这种方法的问题是因为年代久远,很多文章里面提供的源已经失效了。而且也只能安装特定的几种版本,做不到任意版本选择。

参考的链接如下
https://blog.csdn.net/u013578795/article/details/105460386
https://blog.csdn.net/qq_40965177/article/details/83500817

2. 方法二下载源码编译

下载源码编译,然后删除原来的python,把新的python链接上去。
这个方法的缺点是不同的项目需要不同版本的python,删掉旧版本会导致别的项目出问题。

参考的链接如下
https://blog.csdn.net/qq_44696031/article/details/124564768
https://blog.csdn.net/MenciusHometown/article/details/77688728

二、解决方式

还是采用源码方式编译安装新的python,然后利用update-alternatives来切换自己需要的版本

1. 源码方式编译python

1.1 安装编译需要的包

sudo apt -y install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip dosfstools e2fsprogs parted htop tree openssl  perl tofrodos iproute2 gawk  git  xvfb net-tools tftpd flex bison libselinux1 screen pax gnupg diffstat chrpath socat xterm autoconf libtool texinfo gcc-multilib build-essential zlib1g-dev libsdl1.2-dev libglib2.0-dev zlib1g-dev zlib1g-dev:i386 libssl-dev libncurses5-dev    make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev

sudo apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev

1.2 下载python源代码

打开python官网 https://www.python.org/ftp/python/
找到自己需要的版本
在这里插入图片描述
这里以python-3.7.1rc2为例

下载源码,并解压。注意文件名要区分大小写

wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1rc2.tgz
tar xvf Python-3.7.1rc2.tgz

1.3 配置并编译

配置安装路径。注意这里指定的/usr/local/python3.7,后面会用到这个路径

cd Python-3.7.1rc2
./configure --prefix=/usr/local/python3.7 --enable-optimizations --with-ensurepip=install
make

1.4 安装

sudo make install

2. 用update-alternatives切换python版本

2.1 列出所有可用的版本

2.1.1 update-alternatives --list python
leo@xlx:~$ update-alternatives --list python 
update-alternatives: error: no alternatives for python
2.1.2 解决no alternatives for python错误

第一次运行上面的命令可能会报错update-alternatives: error: no alternatives for python
这个错误信息表示 python 的替代版本还没被update-alternatives识别

要解决这个问题,我们先找到所有的python版本

leo@xlx:~$ ll /usr/bin/python*
lrwxrwxrwx 1 root root       9 83 15:11 /usr/bin/python -> python2.7*
lrwxrwxrwx 1 root root       9 83 15:11 /usr/bin/python2 -> python2.7*
-rwxr-xr-x 1 root root 3488528 722  2020 /usr/bin/python2.7*
lrwxrwxrwx 1 root root       9 83 15:11 /usr/bin/python3 -> python3.5*
-rwxr-xr-x 1 root root 4456208 720  2020 /usr/bin/python3.5*
-rwxr-xr-x 1 root root 4456208 720  2020 /usr/bin/python3.5m*
lrwxrwxrwx 1 root root      10 83 15:11 /usr/bin/python3m -> python3.5m*

如上图所示,现有的两个版本分别为/usr/bin/python2.7和/usr/bin/python3.5
添加这两个版本

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

还需要添加我们自己编译的版本,前面设置的安装路径是/usr/local/python3.7,
因此完整的文件路径为/usr/local/python3.7/bin/python3.7

sudo update-alternatives --install /usr/bin/python python /usr/local/python3.7/bin/python3.7 3
2.1.3 再次列出可用的 Python 版本
leo@xlx:~$ update-alternatives --list python 
/usr/bin/python2.7
/usr/bin/python3.5

2.2 切换Python 版本

运行sudo update-alternatives --config python,然后输入对应的序号,比如3,切换到3.7

leo@xlx:~$ sudo update-alternatives --config python 
There are 3 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                                Priority   Status
------------------------------------------------------------
  0            /usr/local/python3.7/bin/python3.7   3         auto mode
* 1            /usr/bin/python2.7                   1         manual mode
  2            /usr/bin/python3.5                   2         manual mode
  3            /usr/local/python3.7/bin/python3.7   3         manual mode

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/local/python3.7/bin/python3.7 to provide /usr/bin/python (python) in manual mode

3.查看当前版本

运行python --version或者直接运行python查看版本信息
已经切换到3.7

leo@xlx:~$ python
Python 3.7.1rc2 (default, Aug  3 2022, 21:42:46) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
leo@xlx:~$ python --version
Python 3.7.1rc2
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值