Python基金会今日发布了Python 3.11,更新中介绍CPython的性能得到了大幅提升。为了优化服务器性能,我打算将Python后端的服务全部改用到Python 3.11。
服务器上运行的是Debian bullseye,apt源的Python固定在3.9,因此如果想要用Python 3.11,必须自己编译。恰巧之前为了适配OJ的需要我自己经常编译Python,于是我按照一贯的路线进行编译。
首先,到 python.org 或镜像站下载源码并解压。
wget https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz
tar -xf Python-3.11.1.tar.xz
cd Python-3.11.1
mkdir /usr/local/python3.11
然后,进行 configure 并 make。习惯上,我一般加上 --enable-optimizations
获得优化。
./configure --prefix=/usr/local/python3.11 --enable-optimizations
make
make install
之后,就是到相应的目录安装虚拟环境和 requirements。
本以为到此处大功告成,结果在运行 MyUNIV 时报错。看了一下,是 pandas 模块在调用 bz2 这个模块时找不到。然而,pypi中并没有 bz2
这个模块。
上网搜索了一下,发现这是自编译 Python 时依赖不全导致的。在安装 Python 前,应当补全依赖。
对于Debian/Ubuntu,可以用以下 apt 命令补全。
sudo apt update
sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
而对于其他的系统,可以访问 Home · pyenv/pyenv Wiki · GitHub 网站查看。
重新编译后,就正常运行了。