在非LTS版Ubuntu 24.10中配置Pipenv+Python 3.9环境的问题与解决
在非LTS版Ubuntu 24.10中配置Pipenv+Python 3.9环境的问题与解决
我最近遇到了个棘手的问题:要使用一个仅支持Python 3.9的旧科学相机模块,但我的Ubuntu 24.10默认搭载的是Python 3.12。本来以为用Pipenv快速搭建一个3.9版本的虚拟环境就能搞定,结果过程远没想象中顺利,折腾了半天终于解决了,把整个过程分享给大家。
一、从源码编译安装Python 3.9
因为Ubuntu 24.10是非LTS版本,就连常用的旧版本Python源也无法提供对应安装包,所以只能选择从源码编译安装。
1. 安装编译依赖
首先得把编译Python需要的依赖包全部安装好:
sudo apt install -y build-essential libssl-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libffi-dev zlib1g-dev
2. 下载并解压Python 3.9源码
我选择的是Python 3.9系列的最新稳定版本3.9.21,执行以下命令下载并解压:
sudo wget https://www.python.org/ftp/python/3.9.21/Python-3.9.21.tgz sudo tar -xvf Python-3.9.21.tgz
3. 编译并安装
进入解压后的源码目录,配置编译参数后执行安装:
cd Python-3.9.21 sudo ./configure --enable-optimizations sudo make altinstall
这里使用altinstall而不是普通的install,是为了避免覆盖系统默认的Python版本。安装完成后,Python 3.9会被安装在/usr/local/bin目录下,我们可以查看目录内容确认:
ls -la /usr/local/bin total 15684 drwxr-xr-x 2 root root 4096 Mar 13 14:09 . drwxr-xr-x 11 root root 4096 Oct 7 21:03 .. -rwxr-xr-x 1 root root 101 Mar 13 14:09 2to3-3.9 -rwxr-xr-x 1 root root 99 Mar 13 14:09 idle3.9 -rwxr-xr-x 1 root root 229 Mar 13 14:09 pip3.9 -rwxr-xr-x 1 root root 84 Mar 13 14:09 pydoc3.9 -rwxr-xr-x 1 root root 16029664 Mar 13 14:08 python3.9 -rwxr-xr-x 1 root root 3053 Mar 13 14:09 python3.9-config
此时系统中已经同时存在两个Python版本了:
python3 --version Python 3.12.7 python3.9 --version Python 3.9.21
二、Pipenv虚拟环境的配置问题与解决
接下来我尝试用Pipenv指定Python 3.9来创建虚拟环境,执行了以下命令:
pipenv install --python '/usr/local/bin/python3.9'
命令执行后提示环境创建成功,但当我检查虚拟环境中的Python版本时,却发现还是系统默认的3.12:
pipenv run python --version Python 3.12.7
我又尝试了pipenv install --python3.9,结果直接报错,完全搞不清问题出在哪。
后来在评论区找到了答案——居然是命令格式的小问题!正确的命令应该是:
$ pipenv install --python 3.9
用这个命令重新创建环境后,再次检查版本就正常了:
pipenv run python --version Python 3.9.21 python3 --version Python 3.12.7 python3.9 --version Python 3.9.21
备注:内容来源于stack exchange,提问作者Mejdi




