首页 > 编程语言 >Python3.7源码编译

Python3.7源码编译

时间:2023-06-27 21:57:25浏览次数:56  
标签:编译 Python openssl libressl Python3.7 源码 usr

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

标签:编译,Python,openssl,libressl,Python3.7,源码,usr
From: https://www.cnblogs.com/shengshengwang/p/17510011.html

相关文章

  • 基于vue +Java+springboot+element-ui开发的智慧班牌系统源码
    电子班牌系统又称之为智慧班牌,是当前校园数字化信息化建设、文化建设的主流,是校园日常工作安排、校园信息发布、班级文化风采展示、课堂交流、家校互通的重要应用载体。在每个班级门口安装一台电子班牌终端,实现学校日常管理、校园信息化建设数据对接,为学生提供一个德智教育文化环境......
  • 代购源码,淘宝代购系统源码,代购程序,代购系统源码PHP前端源码参数说明
    代购业务场景:代购业务近年兴起的一种购物模式,是帮国外客户购买中国商品。主要通过外贸代购模式,把淘宝、天猫等电商平台的全站商品通过API接入到你的网站上,瞬间就可以架设一个有数亿产品的大型网上商城,而且可以把这些中文的商品全部自动翻译成各国语言,能让国外客户看懂,直接在网站......
  • glibc版本过低导致软件编译失败或引发其他问题
    glibc(GNUCLibrary)是一个核心库,为GNU/Linux操作系统提供最基本和最重要的系统调用和函数。它是标准C库的实现,被几乎所有基于Linux的应用程序使用。它提供了内存管理、输入/输出操作、文件处理、字符串操作和许多其他基本操作的函数。它由GNU计划维护,根据GNULesserGeneralPublic......
  • 在线直播系统源码,uniapp滚动加载
    在线直播系统源码,uniapp滚动加载声明submitDate对象用来存放接口需要的具体参数,其中page和limit为查询页数和每页查询数据,total为记录数据总条数,pageList存放页面数据。     data(){return{  pageList:[],//列表数据submitDate:{//放你自己的参数startDate:''......
  • 一行命令使用 Docker 编译 Latex 文件,简单优雅
    使用Docker编译LaTeX文章LaTeX是一种常用的排版系统,它可以帮助用户创建漂亮、专业的文档。但是,安装和配置LaTeX比较麻烦,特别是对于初学者而言。Docker是一个开源平台,可以让用户通过容器化技术来构建、发布和运行应用程序。使用Docker容器可以避免依赖问题,从而使得在不......
  • 直播程序源码技术分享主播邀请上麦功能
    在我们日常生活中,常常要面临很多的社交,而在众多社交方式中,我们常使用的方式之一就是邀请别人进行交流,以聊天来熟悉对方,进行认识。我今天要分享的知识和这个社交方式有些相似,它是一种网络中的社交,也可以称之为互动,常常出现的直播程序源码的直播间内,在直播程序源码的直播间内的使用是......
  • 网络货运系统源码的功能特点
    网络货运系统源码的功能特点一、背景介绍网络货运是随着互联网技术的不断发展而兴起的一种新型货运方式。二、网络货运系统的定义网络货运系统是基于互联网技术的一种全新的货运管理系统。其主要功能包括货物发布、运输指令下达、运输跟踪、费用结算等多个环节,全方位保障货物运输的......
  • 直播程序源码技术分享主播邀请上麦功能
       在我们日常生活中,常常要面临很多的社交,而在众多社交方式中,我们常使用的方式之一就是邀请别人进行交流,以聊天来熟悉对方,进行认识。我今天要分享的知识和这个社交方式有些相似,它是一种网络中的社交,也可以称之为互动,常常出现的直播程序源码的直播间内,在直播程序源码的直播间......
  • ubunut 虚拟机 , 编译过程中, 内存爆满, 卡死 ,重启后报错。
    问题: 在虚拟机中编译linux 过程中,内存沾满,之后强制重启,之后,虚拟机无法启动。报错如下:  解决的方法就是,找到虚拟机的文件夹,然后删除以.lck后缀的文件夹,所有的都产出,重启就可以了。 ......
  • 分布式任务elasticjob整合springboot本地多服务启动(附源码)
    Elastic-Job是一个分布式调度的解决方案,由当当网开源,它由两个相互独立的子项目Elastic-Job-Lite和ElasticJob-Cloud组成,使用Elastic-Job可以快速实现分布式任务调度。Elastic-Job的github地址:https://github.com/elasticjob功能列表:分布式调度协调在分布式环境中,任务能够按指......