CentOS 7.9 环境下安装 Python 3.11 及部署 Open-WebUI

系统环境

操作系统

  • CentOS 7.9
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost ~]# cat /proc/version
Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

部署过程

配置 YUM 源

首先,配置阿里云的 YUM 源以加速软件包下载。

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

安装开发工具

安装 Development Tools 软件包组,该组包含编译和调试软件所需的核心工具。

yum groupinstall "Development Tools" -y

安装 EPEL 和其他依赖

安装 epel-release,以便访问额外的软件包仓库。

yum install -y epel-release

安装其他依赖包,这些包是编译 Python 3.11 和其他依赖软件所必需的。

yum install -y nodejs git
yum -y install  make gcc epel-release zlib-devel bzip2-devel ncurses-devel gdbm-devel perl-IPC-Cmd readline-devel sqlite-devel libffi-devel tk-devel xz-devel

安装 OpenSSL 1.1.1

Python 3.11 需要 OpenSSL 1.1.1 或更高版本。

cd /tmp
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/usr/local/openssl
make && make install

备份旧的 OpenSSL

mv /usr/bin/openssl /usr/bin/openssl.back
mv /usr/include/openssl/ /usr/include/openssl.back

配置新的 OpenSSL

ln -s /usr/local/openssl/include/openssl/ /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

更新系统配置

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v

验证 OpenSSL 版本

openssl version

升级 SQLite

下载并编译安装最新版本的 SQLite。

wget https://www.sqlite.org/2024/sqlite-autoconf-3450100.tar.gz
tar xvfz sqlite-autoconf-3450100.tar.gz
cd sqlite-autoconf-3450100
./configure
make
sudo make install

备份旧的 SQLite

mv /usr/bin/sqlite3 /usr/bin/sqlite3_3.7.17

创建符号链接

ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3

配置 Python 动态库路径

find / -name "libpython3.11.so.1.0"
echo "/opt/soft/python/lib/" | sudo tee /etc/ld.so.conf.d/python3.11.conf
ldconfig

安装 Python 3.11

手动下载并编译安装 Python 3.11。

# 由于yum里没有python3.11的安装包,需要手动下载
wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz
#解压
tar -xzvf Python-3.11.3.tgz
#编译
cd Python-3.11.3
./configure --prefix=/opt/soft/python --with-openssl=/usr/local/openssl --enable-shared
make && make install
# 配置变量环境
vi /etc/profile
export_PATH=/opt/soft/python/bin/:$PATH
LD_LIBRARY_PATH=/opt/soft/python/lib/:$LD_LIBRARY_PATH
source /etc/profile
# 创建软连接
ln -s /opt/soft/python/bin/python3.11 /usr/bin/python3
ln -s /opt/soft/python/bin/pip3.11 /usr/bin/pip3
# 查看python版本
/opt/soft/python/bin/python3.11 -V

配置 pip 源并安装 Open-WebUI

更换 pip 源为阿里官方源,并安装 Open-WebUI

# 更换为阿里官方源
pip3 config set install.trusted-host mirrors.aliyun.com
# 查看设置的pip官方源
cat /root/.config/pip/pip.conf
pip3 install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple open-webui
pip3 install open-webui
find / -name  open-webui 
vim open-webui
# 加入
__import__('pysqlite3')
import sys
sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
# 创建链接
ln -s /usr/local/python3/bin/open-webui /usr/bin/open-webui
# 启动open-webui
open-webui serve

FAQ

版本报错
libraries: libpython3.11.so.1.0: cannot open shared object file: No such file or directory` 错误,可以按照以下步骤解决:

  1. **确认动态库:

    find /opt/soft/python -name "libpython3.11.so*"

    如果未找到,需要重新编译 Python。

  2. 配置动态库路径

    echo "/opt/soft/python/lib" | sudo tee /etc/ld.so.conf.d/python3.11.conf
    sudo ldconfig
  3. 验证配置

    ldconfig -v | grep libpython3.11
  4. 验证修复

    python3.11 --version
    ldd /opt/soft/python/bin/python3.11 | grep libpython3.11

注意事项

  • 编译 Python 时必须包含 --enable-shared 选项,否则不会生成动态库。
  • 如果之前未启用 --enable-shared,需要彻底清理后重新编译。