Ubuntu16.04编译python源码
软件环境:
Ubuntu:版本16.04
Python:版本3.10.2,下载地址https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tgz
OpenSSL:版本1.1.1n,下载地址https://www.openssl.org/source/openssl-1.1.1n.tar.gz
初步编译:
从https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tgz下载python源码
解压,命令:tar -xvf Python-3.10.2.tgz
进入python源码,命令:cd Python-3.10.2/
编译前配置,我将编译结果放在目录/ShenTest,命令:./configure –prefix=/ShenTest
编译make
编译结果如下
注意两处地方
Failed to build these modules:
_ctypes _hashlib _ssl
和
The necessary bits to build these optional modules were not found:
_bz2 _curses _curses_panel
_dbm _gdbm _lzma
_sqlite3 _tkinter _uuid
readline
下面详细介绍如何解决这个的
编译OpenSSL:
注意编译结果窗口最后一句
Could not build the ssl module!
Python requires a OpenSSL 1.1.1. or newer
这就表明ssl模块没有编译进去,需要至少1.1.1版本以上。
如果不解决这个问题,后面使用的时候可能报错。我碰到的是,后面安装包pip install,就会报ssl错误。
之所以要重新编译openssl库,是因为ubuntu自带的openssl经常版本等原因不能满足需要,修改ubuntu自带openssl很麻烦且容易导致系统问题。
下载比较新一点的openssl版本1.1.1n,下载地址https://www.openssl.org/source/openssl-1.1.1n.tar.gz
解压,命令:tar -xvf openssl-1.1.1n.tar.gz
进入openssl源码目录,命令:
cd openssl-1.1.1n/
编译前配置,为了避免一些麻烦(可能的报错),我把它编译成静态库,编译结果我放在/home/shenweihong/TmpCode/OpensslLib/,命令:./config no-shared –prefix=/home/shenweihong/TmpCode/OpensslLib/
编译命令:make
安装命令:make install
至此,openssl就编译好了,中间我没有再碰到其他错误。
Python编译集成OpenSSL:
回到Python源码目录,找到并打开这个文件Modules/Setup,命令:gedit Modules/Setup
因为Openssl静态编译的,在这个文件中找到这几行注释了的代码
# To statically link OpenSSL:
# _ssl _ssl.c \
# -I$(OPENSSL)/include -L$(OPENSSL)/lib \
# -l:libssl.a -Wl,--exclude-libs,libssl.a \
# -l:libcrypto.a -Wl,--exclude-libs,libcrypto.a
#_hashlib _hashopenssl.c \
# -I$(OPENSSL)/include -L$(OPENSSL)/lib \
# -l:libcrypto.a -Wl,--exclude-libs,libcrypto.a
根据之前编译的openssl路径,修改成如下
# To statically link OpenSSL:
OPENSSL=/home/shenweihong/TmpCode/OpensslLib
_ssl _ssl.c \-I$(OPENSSL)/include -L$(OPENSSL)/lib \-l:libssl.a -Wl,--exclude-libs,libssl.a \-l:libcrypto.a -Wl,--exclude-libs,libcrypto.a
_hashlib _hashopenssl.c \-I$(OPENSSL)/include -L$(OPENSSL)/lib \-l:libcrypto.a -Wl,--exclude-libs,libcrypto.a
重新配置python源码,不重新配置不会生效,命令:./configure --prefix=/ShenTest
编译python源码,命令:make
最后编译窗口结果这么一段:
Failed to build these modules:
_ctypes
和之前比少了 _hashlib _ssl
有可能操作失败(即fail还有_hashlib _ssl),我就将命令./configure --prefix=/ShenTest改成./configure --prefix=/ShenTest --with-openssl=/home/shenweihong/TmpCode/OpensslLib,然后再make命令即可
集成其他编译模块:
解决了ssl模块问题,还有其他模块,编译窗口结果这么两段:
Failed to build these modules:
_ctypes
和
The necessary bits to build these optional modules were not found:
_bz2 _curses _curses_panel
_dbm _gdbm _lzma
_sqlite3 _tkinter _uuid
readline
本人验证,每一个模块对应的安装包名(sudo apt-get install 安装包名)如下
模块_ctypes,安装包名libffi-dev
模块_bz2,安装包名libbz2-dev
模块_curses和_curses_panel,安装包名libncursesw5-dev
模块_dbm和_gdbm,安装包名libgdbm-dev
模块_lzma,安装包名python-lzma和liblzma-dev
模块_sqlite3,安装包名libsqlite3-dev
模块_tkinter,安装包名tk-dev
模块_uuid,安装包名uuid-dev
模块readline,安装包名libreadline-dev
总之,执行这个命令全部安装好,命令:
sudo apt-get install libffi-dev libbz2-dev libncursesw5-dev libgdbm-dev python-lzma liblzma-dev libsqlite3-dev tk-dev uuid-dev libreadline-dev
建议这个命令执行两三次,担心中间有依赖报错,但是再执行一次可能就好。
在python源码中,清理一下,命令:make clean
再配置一次,命令:./configure –prefix=/ShenTest
编译,命令:make
这时候查看已经没有未集成或Fail的模块
安装python编译结果,命令:make install
小结:
编译python源码,没台电脑环境不一定相同,可能会碰到其他问题,本文是我操作过程的经验记录下来。
本人最近入门python,使用pycharm编辑器,选择python经常碰到各种问题,最新的pycharm不支持ubuntu自带老版本python,特别是pip install安装包的时候,报的SSL错误很麻烦,就重新研究编译python。
Ubuntu16.04编译python源码相关推荐
- ubuntu16.04编译android6_r1源码绕坑贴
1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6.0的源码编译出来了,各种配置,各种error,各种爬坑,特写此博客记录爬坑经历.先上图,Ubuntu上编译完后成功运行模拟 ...
- Ubuntu16.04编译Android10源码并刷机Pixel
一.环境描述 电脑配置: 系统:Windows10 内存:16GB 硬盘:500GB 软件环境: VirtualBox虚拟机 虚拟配置: 系统:Ubuntu16.04.7 内存:9GB 硬盘:300G ...
- 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...
- anaconda tensorflow 2.3_TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
1 安装选择 1.1 平台 目前TensorFlow已支持Mac.Ubuntu和Windows三个主流平台(64位平台), 1.2 GPU vs CPU 在安装时可以选择安装版本是否支持GPU, 1. ...
- python编译器源码_编译python源码
广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! 尝试通过源码自己编译 python,使用的系统是 ubuntu14.04 l ...
- win7下编译python源码
win7下编译python源码 下载源码: 打开网页:https://www.python.org/downloads/release/python-2710/ 下载完成后解压即可 查看文档: 其实最 ...
- ubuntu 20.04编译Android源码
一直以来想编译android源码,趁闲编译了下,ubuntu版本:20.04,android源码版本:android-9.0.0_r30.总体还比较顺畅,中间遇到了一些报错,在文中也有记录,详情见下文 ...
- python源码多平台编译_ubuntu编译python源码的坑
在linux平台下编译python时只需要3条命令. 编译步骤 在github或https://www.python.org/downloads/中下载python源码 解压压缩包进路目录执行 1. ...
- Python 源码剖析(一)—— vs2013 编译 python 源码
参考 windows环境下编译python 准备 VS 2013(其实 vs 版本编译的差异不大,设置也基本相同) python 源码文件: Python-2.7.3.tgz 编译 (1)解压 Pyt ...
最新文章
- 大话IT职场之办公室环境重要吗?
- UBI 文件系统移植 sys 设备信息【转】
- 如何从MP4视频文件中抽取MP3音频?
- eclipse中测试Hibernate异常报 ORA-00926: 缺失 VALUES 关键字
- 更改WSSv3站点集访问地址
- Andriod anim scale中的属性介绍以及Animation类的属性
- 与优秀的人在一起进步:我发起的“乐学”分享活动
- 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方
- NoClassDefFoundError: org/apache/flink/api/scala/typeutils/CaseClassTypeInfo
- IDEA引MAVEN项目jar包依赖导入问题解决
- java点歌系统代码_基于jsp的KTV点歌系统-JavaEE实现KTV点歌系统 - java项目源码
- 大数定律和中心极限定理
- 灾难性的洪水帮助塑造了火星上的独特景观
- 简述no less than和not less than区别
- elasticsearch7.5 索引状态yellow问题解决
- 【科普】准大一新生如何挑选笔记本电脑
- kubernetes的基本概念及安装部署
- VI设计中系统视觉基本要素优漫动游
- 计蒜客 A1596.蒜头君王国 概率计算(dp)
- 磁悬浮惯性动量轮技术_第1章_绪论
热门文章
- 【2D目标跟踪】SIMPLE ONLINE AND REALTIME TRACKING阅读笔记(2017)
- 使用mysql_upgrade命令_mysql_upgrade命令
- css定位和xpath定位,selenium的css定位与xpath定位
- 【delphi】判断文件的编码方式(ANSI、Unicode、UTF8、UnicodeBIG)
- Linux黑洞路由命令,linux – Blackhole路由私有内部网流量
- bitcoin-cli命令行组装交易并成功广播
- 深度优先搜索python
- 编程日记-主要编程语言简介
- MSN spaces Beta
- MailUtil-Java发送邮件工具类