AlmaLinux 安装 Python 从入门到实战解决依赖和版本问题

想象一下,你刚刚在一台崭新的AlmaLinux服务器上完成了系统安装,雄心勃勃地准备开始一个Python项目,结果一敲下
python
或
python3
,终端要么报错“command not found”,要么返回一个老旧的版本,当你尝试安装一个新包时,又跳出一堆看不懂的依赖错误……别担心,这几乎是每个AlmaLinux(以及它的亲戚CentOS、RHEL)新用户都会遇到的“洗礼”。这篇文章就是你的通关秘籍,咱们不讲那些干巴巴的理论,而是像一个经验丰富的老手带着你,一步步拆解问题,把Python安装、版本管理和依赖处理这些事儿彻底理清楚。
你的AlmaLinux其实已经“有”Python了
在你急着下载什么安装包之前,先来个小检查。打开终端,输入:
python3 –version
或者
python –version
通常,你会看到一个版本号,比如
Python 3.6.8
或
Python 3.9.21
。这说明AlmaLinux预装了Python。
但是,这里有一个天大的“陷阱”需要你立刻明白:
这个系统自带的Python,是给操作系统本身(比如
yum
包管理器)服务的“御用管家”。你去修改它、升级它,或者在里面安装第三方库,很容易就会影响到系统的稳定运行,导致系统工具罢工。所以,我们的第一原则就是:
永远不要直接在系统级的Python上安装项目依赖。
那么,这个自带的Python版本可能很老(比如AlmaLinux
8
⁄
9
可能默认是3.6或3.8),我的项目需要3.10甚至3.11,怎么办?这就引出了我们真正的主角:多种安装和管理方式。
核心工具一:dnf(和它的前身yum)—— 系统包管理器
dnf是AlmaLinux的官方软件包管理器,也是我们获取软件的第一道门。通过它安装Python,是最“正统”的方式,优点是软件包都经过系统测试,兼容性好。
1. 搜索可用的Python版本
想知道系统仓库里有哪些Python版本可以装?用这个命令搜一下:
dnf search python3
你会看到一个长长的列表,其中会有像
python3.11
,
python3.12
这样的包。或者,更精确地搜索某个版本的可执行文件:
dnf provides python3.11
这会告诉你,哪个软件包提供了
python3.11
这个命令。
2. 安装一个特定版本的Python
假设我们看到了
python3.11
。安装它:
sudo dnf install python3.11
安装完成后,系统会多出一个命令
python3.11
。你可以验证:
python3.11 –version
# 输出:Python 3.11.x
3. 管理多个Python版本(
alternatives
大法)
现在你系统里可能同时存在
python3
(可能是3.6) 和
python3.11
。如何让它们和平共处,并且方便切换?这就轮到
alternatives
这个系统级的版本管理工具登场了。
查看当前系统为
python3
命令设置了哪个版本:
sudo alternatives –list | grep python3
设置
python3
命令指向3.11版本:
sudo alternatives –set python3 /usr/bin/python3.11
或者,用交互式的方式选择(更推荐新手使用):
sudo alternatives –config python3
它会列出所有可选的版本,让你输入一个数字来选择。
小贴士:
alternatives
管理的是
python3
这个“软链接”命令指向谁。它不会改变
python3.11
这个特定命令的存在。所以你始终可以用
python3.11
来精确地调用3.11版本,而用
python3
来调用你当前设置的“默认”版本。
4. 安装关键的开发工具和头文件(解决依赖问题的基石!)
很多时候,你用
pip
安装一个包(比如
numpy
,
psycopg2
),它会从源代码开始编译,这时候就会报错“fatal error: Python.h: No such file or directory”之类的。这是因为你缺少了Python的
开发头文件
和
编译工具
。
解决方法:安装对应版本的开发包。
# 为python3.11安装开发工具链
sudo dnf install python3.11-devel gcc gcc-c++ make
这条命令非常重要!它为你准备了编译C扩展模块所需的一切。每次你新建一个环境,如果打算安装需要编译的库,都应该先考虑执行这条命令(把
python3.11
换成你实际使用的版本)。
核心工具二:
pyenv
—— Python专属的版本管理神器
dnf安装的版本毕竟有限,而且不同版本间隔离不够完美。如果你需要更灵活地在
任意Python版本
(包括官方最新版、PyPy等)之间切换,并且为每个项目创建
完全独立
的Python环境,那么
pyenv
就是你的不二之选。
1. 安装pyenv的依赖
在安装pyenv本身之前,先装好它编译Python所需要的依赖库:
sudo dnf install gcc make zlib-devel bzip2-devel readline-devel sqlite-devel openssl-devel ncurses-devel tk-devel libffi-devel xz-devel
这些是Python编译和运行时常用的依赖。一次性装好,省心。
2. 安装pyenv本体
推荐使用官方提供的安装脚本:
curl https://pyenv.run | bash
安装完成后,它会提示你配置shell环境。你需要把下面几行加到你的
~/.bashrc
或
~/.zshrc
文件中(按它提示的做):
export PYENV_ROOT=”$HOME/.pyenv”
export PATH=”$PYENV_ROOT/bin:$PATH”
eval “$(pyenv init -)”
保存文件后,让配置立即生效:
source ~/.bashrc
3. 使用pyenv安装你需要的Python版本
查看所有可安装的Python版本:
pyenv install –list | grep -v -e ‘-‘ -e ‘_’ -e ‘conda’ | tail -n 30 # 看最新的稳定版
安装一个具体的版本,比如3.11.4:
pyenv install 3.11.4
这个过程会从源代码编译安装,所以之前安装的那些
-devel
包就派上用场了。安装成功后,你可以用
pyenv versions
查看已安装的版本。
4. 设置全局或局部Python版本
设置全局默认版本(对你所有新终端窗口生效):
pyenv global 3.11.4
之后输入
python –version
,就会显示3.11.4。
更重要的用法:设置项目局部版本
这是pyenv的精华!进入你的项目目录:
cd my_awesome_project
pyenv local 3.11.4
这会在当前目录下创建一个名为
.python-version
的文件,里面写着
3.11.4
。当你在这个目录(或子目录)下打开终端时,pyenv会自动切换到这个版本。离开目录,则恢复之前版本。完美隔离!
核心工具三:
venv
/
virtualenv
—— 项目的独立沙箱
即使用
pyenv
管理好了全局的Python版本,但一个版本下安装的包,还是会被所有项目共享。比如项目A需要
Django 4.0
,项目B需要
Django 3.2
,这就会打架。这时,我们需要
虚拟环境
。
Python 3.3+ 自带了
venv
模块,可以创建轻量级的虚拟环境。
1. 创建虚拟环境
假设你在
my_awesome_project
目录下:
# 确保当前Python版本正确(比如通过pyenv local设置为3.11.4)
python -m venv .venv # .venv 是虚拟环境目录名,通常以点开头表示隐藏
2. 激活和退出虚拟环境
# 激活(Linux/macOS)
source .venv/bin/activate

# 激活后,你的终端提示符会发生变化,比如:
(.venv) [root@my-server my_awesome_project]#
看到
(.venv)
前缀了吗?恭喜,你已经进入了这个项目的专属沙箱。此时,所有
pip install
的包都会安装到
.venv/lib/pythonX.X/site-packages/
目录下,不会污染系统Python或其他项目。
# 退出虚拟环境
deactivate
实战演练:创建一个需要特定依赖的Python项目
咱们把上面学的都串起来,模拟一个真实场景。
目标:
在AlmaLinux 9上创建一个使用Python 3.10和Django 4.2的Web项目,并处理常见的依赖问题。
准备系统环境:
sudo dnf update -y
sudo dnf install -y git # 安装git,管理代码
使用pyenv安装Python 3.10.14:
# 安装依赖
sudo dnf install -y gcc make zlib-devel bzip2-devel readline-devel sqlite-devel openssl-devel ncurses-devel tk-devel libffi-devel xz-devel

# 安装pyenv(如果还没装)
curl https://pyenv.run | bash
# 记得配置shell环境并source

# 安装Python 3.10.14
pyenv install 3.10.14
创建项目并设置Python版本:
mkdir django_project && cd django_project
pyenv local 3.10.14
python –version # 确认版本是3.10.14
创建虚拟环境并激活:
python -m venv .venv
source .venv/bin/activate
安装Django并创建项目:
pip install –upgrade pip # 先升级pip
pip install Django==4.2
django-admin startproject mysite .
# 注意最后的点 ‘.’,表示在当前目录创建项目
遇到依赖问题怎么办?(经典案例)
假设你想安装
psycopg2
连接PostgreSQL数据库,但直接
pip install psycopg2
可能会失败,因为缺少
libpq-devel
库。
# 错误尝试
pip install psycopg2
# 可能报错:Error: pg_config executable not found.

# 解决方案:安装系统级的PostgreSQL开发包
exit # 先退出虚拟环境,在系统下操作
sudo dnf install postgresql-devel # 或者 libpq-devel

# 重新激活虚拟环境
source .venv/bin/activate

# 再次安装,这次就能成功了
pip install psycopg2-binary # 或者 psycopg2(如果开发包装了)
这个例子说明,
很多Python库是C/C++写的,需要系统级的依赖
。解决思路是:看到
xxx-config
找不到,就去用
dnf search
安装对应的
xxx-devel
包。
管理项目依赖:
在项目稳定后,把依赖冻结到文件:
pip freeze > requirements.txt
别人(或你以后)想重现环境:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
常见问题速查表
pip
命令找不到?
先激活虚拟环境。如果已经激活,试试
python -m pip install xxx
,这个命令比直接用
pip
更可靠。
安装包时报错
Permission denied
或
Read-only file system
?
你很可能在系统Python或虚拟环境外执行
pip install
。
解决方案永远是:激活你的虚拟环境,或者使用
pip install –user xxx
(装到用户目录)
。
编译安装Python时卡在
building
阶段?
检查网络,或者缺少了开发工具(gcc, make)和某些库的-devel包。确保你按照前面的步骤安装了所有必要的依赖。
如何彻底卸载pyenv安装的某个Python版本?
pyenv uninstall 3.11.4
即可干净删除。
最后的小叮嘱:
在AlmaLinux这类服务器系统上工作,牢记
“系统Python不能动,项目环境要独立,依赖问题找-devel”
这三句口诀,你就能游刃有余。从dnf打好基础,用pyenv玩转版本,靠venv隔离项目,这一套组合拳下来,再复杂的Python环境问题也能被你理得清清楚楚。祝你在AlmaLinux上的Python之旅一帆风顺!