【自记录】Ubuntu20.04下Python自编译
因为需要新的Python版本,但是我们不希望修改系统原生的Python版本避免某些系统应用无法启动,因此自建一个干净的路径引入Python。
1.编译
以下在aarch64下测试,x64下可能有差异
- 必须把相关的devel包安装完毕,否则python可能缺功能。
apt install libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev libgdbm-compat-dev libdb-dev
如果是CentOS 8 系列,可以参考
yum install -y openssl-devel bzip2-devel libffi-devel readline-devel sqlite-devel xz-devel gdbm-devel libuuid-devel tk-devel zlib-devel ncurses-devel expat-devel libnsl2-devel
- 编译本体
开启-g,保留符号信息,方便后续调试。同时使用O2,尽量避免速度损失。如果需要精确定位Python源码,可能需要开到O0。
以Python3.10为例:
./configure CFLAGS="-g -O2" --prefix=/app/python --enable-optimizations
make -j$(nproc)
make install
可选:可以将自编译的Python加入默认路径
echo 'export PATH=/app/python/bin:$PATH' > /etc/profile.d/custom_python.sh
2.gdb调试
- 将源码目录下的
Tools\gdb
目录下的libpython.py
拷贝到任意目录,比方说拷贝到/app/python/gdb
目录,然后在gdb的初始化脚本中追加该路径。
vi ~/.gdbinit
python
import sys
sys.path.insert(0, "/app/python/gdb")
import libpython
end
然后就可以正常使用py-bt
等功能了。