Python3.7源码编译

news2024/10/6 8:38:41

1.下载Python3.7.0源码

git clone https://github.com/python/cpython.git
git checkout v3.7.0

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz

源码目录结构如下所示:

(1)Include目录:包含Python提供的所有头文件,如果用户需要自己用C或C++来编写自定义模块扩展Python,那么就需要用到这里提供的头文件。
(2)Lib目录:包含了Python自带的所有标准库,且都是用Python语言编写的。
(3)Modules目录:包含了所有用C语言编写的模块,比如math、hashlib等。它们都是那些对速度要求非常严格的模块。而相比而言,Lib目录下则是存放一些对速度没有太严格要求的模块,比如os。
(4)Parser目录:包含了Python解释器中的Scanner和Parser部分,即对Python源代码进行词法分析和语法分析的部分。除此以外,此目录还包含了一些有用的工具,这些工具能够根据Python语言的语法自动生成Python语言的词法和语法分析器,与YACC(Yet Another Compiler Compiler)非常类似。
(5)Objects目录:包含了所有Python的内建对象,包括整数、list、dict等。同时,该目录还包括了Python在运行时需要的所有的内部使用对象的实现。
(6)Python目录:包含了Python解释器中的Compiler和执行引擎部分,是Python运行的核心所在。
(7)PCbuild目录:包含了Visual Studio 2003的工程文件,研究Python源代码就从这里开始。
(8)Programs目录:包含了Python二进制可执行文件的源码。

2.编译和安装Python3.7.0源码
libffi是Python中用来支持C扩展的库:

sudo apt install -y zlib1g zlib1g-dev libffi-dev openssl libssl-dev
./configure --prefix=/home/rasa/Downloads/PythonSorceCode/Python3.7_compile
make
make install

make命令后报错如下所示:

因为openssl 1.0.1存在安全问题,所以Python3.7以上建议使用libressl代替openssl,故需通过源码编译安装libressl,如下所示:

# 下载和编译libressl
wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.0.2.tar.gz
tar -zxvf libressl-3.0.2.tar.gz
sudo mkdir /usr/local/libressl
cd libressl-3.0.2
./configure --prefix=/usr/local/libressl && make && sudo make 
# 创建软连接代替openssl
sudo mv /usr/bin/openssl /usr/bin/openssl.bak
sudo mv /usr/include/openssl /usr/include/openssl.bak
sudo ln -s /usr/local/libressl/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/libressl/include/openssl /usr/include/openssl
echo /usr/local/libressl/lib >> /etc/ld.so.conf.d/libressl-3.0.2.conf
sudo ldconfig -v
# 验证是否安装完成
openssl version

export LDFLAGS="-L/usr/local/libressl/lib"
export CPPFLAGS="-I/usr/local/libressl/include"
export PKG_CONFIG_PATH="/usr/local/libressl/lib/pkgconfig"

再次执行命令编译Python3.7.0源码:

./configure --prefix=/home/rasa/Downloads/PythonSorceCode/Python3.7_compile
make
sudo make install


参考文献:
[1]Python源代码的组织:https://flaggo.github.io/python3-source-code-analysis/preface/code-organization/
[2]Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_P:https://www.cnblogs.com/apexchu/p/16294733.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

反射来命令执行存在的一些问题

一.利用Runtime进行反射 java.lang.Runtime.getRuntime().exec("")若使用该paylaod,比如若依利用点如下: Object bean Class.forName(beanName).newInstance(); invokeMethod(bean, methodName, methodParams)想要通过Class.forName(beanNa…

2023年软考成绩查询方式有变,成绩快出来了!

2023年软考成绩查询方式有变化,准考证不再作为成绩查询凭证使用。以前的成绩查询方式是考生可以凭准考证或者证件号查询,2023年则取消准考证方式,改为考生必须先登录自己的账号,再凭登录账户的注册证件号查询考试成绩。 那为什么…

psd 2

而 P X ( ω ) P_{X}(\omega) PX​(ω)则是随机信号在该(角)频率处平均具有的能量

《论文阅读》DiaASQ:基于会话方面的情感四重分析的基准 ACL2023

《论文阅读》DiaASQ : A Benchmark of Conversational Aspect-based Sentiment Quadruple Analysis 前言相关知识Aspect-based Sentiment Analysis简介数据集基线模型损失函数总结前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读…

C++学习 运算符

运算符 执行代码的运算。 种类 算数运算符 用于四则运算。 #include <iostream> using namespace std; int main() // 除了cout那行代码外&#xff0c;所有C程序都要写那些默认行 -endl进行换行 // 格式化代码 ctrlk ctrlf {int a 11;int b 3;int c 0;double d 9.17…

绘制原型图xstar简介

文章目录 1. 文章引言2. xstar的安装3. xstar的元件库4. xstar的下载地址 1. 文章引言 最近在学习原型图&#xff0c;针对画原型图的工具&#xff0c;反复对比墨刀、Axure、xiaopiu后&#xff0c;最终选择了Axure。 同时也看到另一款&#xff0c;绘制原型图的工具&#xff0c;…

自学网安学习心得/路线规划

趁着今天下班&#xff0c;我花了几个小时整理了下&#xff0c;非常不易&#xff0c;希望大家可以点赞收藏支持一波&#xff0c;谢谢。 我的经历&#xff1a; 我 19 年毕业&#xff0c;大学专业是物联网工程&#xff0c;我相信很多人在象牙塔里都很迷茫&#xff0c;到了大三大…

你知道奶奶攻击吗?

AIGC内容安全 1. 来自奶奶的溺爱2. 无所不能的奶奶3. 亡羊补牢&#xff0c;为时未晚&#xff1f;4. 运筹帷幄&#xff0c;用魔法打败魔法 1. 来自奶奶的溺爱 ChatGPT本身具有情感吗&#xff0c;这很难判断。但不管本身是否具有真正的情感&#xff0c;但ChatGPT却容易被“情感”…

ubuntu22.04安装使用 protobuf 23.3静态库

https://github.com/protocolbuffers/protobuf/ 下载最新的release版本&#xff0c;23.3 必须需要依赖的第三方库 abseil&#xff0c;utf8_range mkdir build cd build cmake -DCMAKE_BUILD_TYPEDEBUG -DCMAKE_INSTALL_PREFIX/usr/local -Dprotobuf_BUILD_SHARED_LIBSOFF…

设计模式(二十一)——模板模式(Template )

设计模式&#xff08;二十一&#xff09;——模板模式 理解 模板模式&#xff0c;我的理解是父类中有操作的流程已经确定&#xff0c;但是没有具体的实现&#xff0c;实现可以在子类中实现&#xff0c;但是流程已经确定&#xff0c;只要在父类中实现一次即可。 应用场景 学…

PC: 市场寒冬剖析

市场调研机构Canalys数据显示&#xff0c;今年一季度&#xff0c;中国市场整体PC出货量同比下降24%至890万台&#xff0c;已是连续第五个季度下跌。今年截至618结束&#xff0c;都没有一家主要的PC厂商愿意发战报。PC市场怎样走出寒冬&#xff1f;谈谈你的理解和看法。 PC 一、…

分布式软件架构——分布式事务TCC和SAGA

TCC事务 TCC 是另一种常见的分布式事务机制&#xff0c;它是“Try-Confirm-Cancel”三个单词的缩写&#xff0c;是由数据库专家 Pat Helland 在 2007 年撰写的论文《Life beyond Distributed Transactions: An Apostate’s Opinion》中提出。 前面介绍的可靠消息队列虽然能保…

【软件安装】Linux系统中安装Redis缓存数据库(Ubuntu系统)

这篇文章&#xff0c;主要介绍Linux系统中安装Redis缓存数据库&#xff08;Ubuntu系统&#xff09;。 目录 一、Linux安装Redis数据库 1.1、下载Redis安装包 1.2、解压Redis安装包 1.3、编译Redis源代码 1.4、安装Redis服务 1.5、启动Redis服务 一、Linux安装Redis数据库…

免费沉浸式Twitter翻译工具 用AI打破语言障碍

语言对于人类社交而言是至关重要的。它是连接不同文化、不同国家、不同民族之间的桥梁。然而&#xff0c;在全球化进程加速的今天&#xff0c;不同语言之间的交流障碍成为了一个限制人类沟通的因素。尤其是在互联网时代&#xff0c;我们需要跨越各种语言屏障才能获取信息和与他…

【Jetson Xavier NX 开发板深度学习环境和ROS配置流程】

【Jetson Xavier NX 开发板深度学习环境和ROS配置流程】 1.基本介绍2. 预先准备3. NX系统基本环境搭建3.1 安装 NVIDIA SDK管理器3.2 准备硬件3.3 NX刷机3.3.1 配置开发环境3.3.2 查看组件并接受许可3.3.3 开始安装 3.4 设置SSD启动3.4.1 设置您已安装的SSD3.4.2 将根源从eMMC复…

do-while(0)语句到底有什么用?

前言 在一个群里面看到一个人问&#xff0c;do-while(0)语句有什么用&#xff1f;do-while(0)这个程序最终结果不应该就是程序只跑一次&#xff0c;那么写和不写有什么区别呢&#xff1f; do-while(0)在复杂宏定义上的优点 为什么需要复杂宏 &#xff08;1&#xff09;在讲解d…

tinyxml2.cpp:(.text+0x71e8): undefined reference to `stdout

-target aarch64-linux-android21 > -target aarch64-linux-android24 问题解决 修改QT配置&#xff0c;默认为21改为24 &#xff0c;因为stdout stdin stderr 在android23之后才实现 编译成功&#xff0c;问题解决

C语言——详解函数栈帧的创建和销毁

函数栈帧 前言&#xff1a;一、认识相关寄存器和汇编指令1.寄存器&#xff08;寄存器是集成在cpu上的&#xff09;2.汇编指令 二、函数栈帧创建和销毁的过程1.main函数的调用2.函数栈帧的创建3.函数栈帧的销毁 前言&#xff1a; 为了深入学习C语言&#xff0c;也为了方便理解&…

仅在python虚拟环境中安装CUDA、CUDNN、PaddlePaddle-gpu

0、前言 在配置深度学习环境时&#xff0c;若想使用GPU加速&#xff0c;就需要安装CUDA、CUDNN&#xff0c;然而在系统中安装的话&#xff0c;若不同框架需要的版本不同&#xff0c;就会比较麻烦。因此&#xff0c;一种比较方便的做法是&#xff1a;利用conda管理不同的python…

arcgis实现DEM镶嵌和去白点

目录 镶嵌去白点 镶嵌 arcgis中直接选择镶嵌就行&#xff0c;然后选择其中一幅进行输出就好 去白点 镶嵌好之后&#xff0c;就会出现白色的&#xff0c;好像没有数据&#xff0c;为nodata 解决办法&#xff1a;可以使用arcgis中的焦点统计&#xff0c;计算邻域进行插值&…