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

部署运行你感兴趣的模型镜像

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

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

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

1. 方法一添加新的源

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

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

2. 方法二下载源码编译

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

参考的链接如下
https://blog.youkuaiyun.com/qq_44696031/article/details/124564768
https://blog.youkuaiyun.com/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

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我需要帮助用户在树莓派上的Ubuntu 24.10系统中安装Python 3.8.10。首先,用户提供的引用链接是Python 3.8.0的源码,但用户需要的是3.8.10,所以需要确认正确的源码包地址。 接下来,我应该检查系统是否已安装必要的构建依赖库。对于编译Python源码来说,通常需要安装build-essential、zlib1g-dev、libssl-dev等包。需要提醒用户更新软件源并安装这些依赖,避免编译过程中出现错误。 然后,下载正确的Python 3.8.10源码包。用户提供的链接是3.8.0的,需要更正为3.8.10的下载地址。正确的URL应该是https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz。 解压源码包后,进入目录进行配置。这里需要注意,树莓派可能使用不同的架构,比如ARM,所以配置时可能需要指定安装路径,例如使用--prefix=/usr/local/python3.8来避免与系统自带的Python冲突。配置完成后,执行make和make install命令进行编译和安装安装完成后,需要将新安装Python路径添加到环境变量中,或者创建符号链接,方便用户直接使用。此外,可能需要更新pip,并验证安装是否成功,检查Python版本是否正确。 还需要考虑用户可能遇到的常见问题,例如依赖库缺失导致编译失败,或者多个Python版本共存时的冲突问题。建议用户安装虚拟环境工具如venv,以管理不同项目的依赖。 最后,生成相关的问题,帮助用户进一步了解如何管理Python版本、处理依赖问题以及使用虚拟环境等。</think>### 分步解答:在树莓派 Ubuntu 24.10 安装 Python 3.8.10 #### 1. 安装编译依赖 ```bash sudo apt update && sudo apt upgrade -y sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev wget ``` 说明:这些库是编译Python源码的基础依赖,缺少任意一个都可能导致编译失败[^1]。 #### 2. 下载并解压源码 ```bash wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz tar -xvf Python-3.8.10.tgz cd Python-3.8.10 ``` 注意:这里已修正为正确的3.8.10版本下载地址[^2]。 #### 3. 配置编译参数 ```bash ./configure --enable-optimizations --prefix=/usr/local/python3.8 ``` 说明:`--prefix`参数指定自定义安装路径,避免覆盖系统默认Python。 #### 4. 编译安装 ```bash make -j4 # 根据CPU核数调整线程数 sudo make altinstall # 使用altinstall避免覆盖默认python命令 ``` 注意:树莓派3/4的CPU一般为4核,可设置为`-j4`加速编译。 #### 5. 验证安装 ```bash /usr/local/python3.8/bin/python3.8 --version # 应输出 Python 3.8.10 ``` #### 6. 创建符号链接(可选) ```bash sudo ln -s /usr/local/python3.8/bin/python3.8 /usr/local/bin/python38 sudo ln -s /usr/local/python3.8/bin/pip3.8 /usr/local/bin/pip38 ``` #### 7. 更新pip工具 ```bash python38 -m pip install --upgrade pip ``` ### 多版本管理建议 使用`update-alternatives`管理多个Python版本: ```bash sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/python3.8/bin/python3.8 2 sudo update-alternatives --config python3 # 交互式选择版本 ``` ### 常见问题处理 - **缺失libffi.so.6**:创建符号链接`sudo ln -s /usr/lib/arm-linux-gnueabihf/libffi.so.7 /usr/lib/libffi.so.6` - **SSL模块异常**:检查是否完整安装`libssl-dev`,重新执行configure步骤 - **pip安装失败**:尝试`python38 -m ensurepip`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值