【自记录】Ubuntu20.04下Python自编译

因为需要新的Python版本,但是我们不希望修改系统原生的Python版本避免某些系统应用无法启动,因此自建一个干净的路径引入Python。

1.编译

以下在aarch64下测试,x64下可能有差异

  • 必须把相关的devel包安装完毕,否则python可能缺功能。
shell 复制代码
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 系列,可以参考

shell 复制代码
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为例:

shell 复制代码
./configure CFLAGS="-g -O2" --prefix=/app/python --enable-optimizations
make -j$(nproc)
make install

可选:可以将自编译的Python加入默认路径

shell 复制代码
echo 'export PATH=/app/python/bin:$PATH' > /etc/profile.d/custom_python.sh

2.gdb调试

  • 将源码目录下的Tools\gdb目录下的libpython.py拷贝到任意目录,比方说拷贝到/app/python/gdb目录,然后在gdb的初始化脚本中追加该路径。
shell 复制代码
vi ~/.gdbinit
复制代码
python
import sys
sys.path.insert(0, "/app/python/gdb")
import libpython
end

然后就可以正常使用py-bt等功能了。

相关推荐
励志不掉头发的内向程序员1 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构
PHP实战开发录1 小时前
PHP接口大整数为什么变了
开发语言·php
Yolanda_20221 小时前
15.dataloader的使用
python
临床数据科学和人工智能兴趣组4 小时前
在R语言中, 使用 as.factor() 函数转换数值型变量
开发语言·r语言
杨杨杨大侠7 小时前
Jev、Kev、Laya:决策模型怎么选,什么时候需要微调?
人工智能·python·agent
andyweike7 小时前
php笔记
开发语言·笔记·php
LOVE️YOU8 小时前
Python 在定义函数时,究竟定义的是什么?
python
段一凡-华北理工大学8 小时前
大模型应用开发 100 天:Python + LLM 从入门到精通 day26~Prompt 调试与优化——A/B 测试与效果评估
windows·python·大模型·prompt·智能体·提示词工程·高炉智能化
Minecraft红客8 小时前
以撒的结合
python·游戏·电脑·娱乐
Circ.8 小时前
Python 调试 Litellm 本地大模型接口:模型列表与对话接口实操踩坑记录
开发语言·python