【自记录】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等功能了。

相关推荐
m0_609160491 分钟前
C#怎么实现HttpClient最佳实践 C#如何用IHttpClientFactory管理HttpClient避免端口耗尽【网络】
jvm·数据库·python
码云社区3 分钟前
JAVA同城上门做饭系统家政上门同城服务系统源码小程序+APP+公众号+h5
java·开发语言·小程序
zjy277774 分钟前
Quill 编辑器光标意外跳转至顶部的解决方案
jvm·数据库·python
2301_766283445 分钟前
MySQL数据误删除后如何快速恢复_基于binlog日志的闪回操作
jvm·数据库·python
duke8692672145 分钟前
Bootstrap中常用的文本颜色、背景颜色及边框色类
jvm·数据库·python
小灰灰搞电子10 分钟前
PyQt QtWaitingSpinner详解-为你的 Qt 程序带来丝滑等待动画
开发语言·qt·pyqt
Gofarlic_oms110 分钟前
Adams许可排队严重?不想买新许可,闲置回收立即可用
java·大数据·服务器·开发语言·人工智能
m0_7403524211 分钟前
React 中的渲染(Rendering)机制详解.txt
jvm·数据库·python
张小凡vip11 分钟前
python单元测试详解
开发语言·python·单元测试
weixin_4440129312 分钟前
WooCommerce 用户登录状态控制元素显隐的 CSS 实现方案
jvm·数据库·python