软件环境:

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源码相关推荐

  1. ubuntu16.04编译android6_r1源码绕坑贴

    1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6.0的源码编译出来了,各种配置,各种error,各种爬坑,特写此博客记录爬坑经历.先上图,Ubuntu上编译完后成功运行模拟 ...

  2. Ubuntu16.04编译Android10源码并刷机Pixel

    一.环境描述 电脑配置: 系统:Windows10 内存:16GB 硬盘:500GB 软件环境: VirtualBox虚拟机 虚拟配置: 系统:Ubuntu16.04.7 内存:9GB 硬盘:300G ...

  3. 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...

  4. anaconda tensorflow 2.3_TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    1 安装选择 1.1 平台 目前TensorFlow已支持Mac.Ubuntu和Windows三个主流平台(64位平台), 1.2 GPU vs CPU 在安装时可以选择安装版本是否支持GPU, 1. ...

  5. python编译器源码_编译python源码

    广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! 尝试通过源码自己编译 python,使用的系统是 ubuntu14.04 l ...

  6. win7下编译python源码

    win7下编译python源码 下载源码: 打开网页:https://www.python.org/downloads/release/python-2710/ 下载完成后解压即可 查看文档: 其实最 ...

  7. ubuntu 20.04编译Android源码

    一直以来想编译android源码,趁闲编译了下,ubuntu版本:20.04,android源码版本:android-9.0.0_r30.总体还比较顺畅,中间遇到了一些报错,在文中也有记录,详情见下文 ...

  8. python源码多平台编译_ubuntu编译python源码的坑

    在linux平台下编译python时只需要3条命令. 编译步骤 在github或https://www.python.org/downloads/中下载python源码 解压压缩包进路目录执行 1. ...

  9. Python 源码剖析(一)—— vs2013 编译 python 源码

    参考 windows环境下编译python 准备 VS 2013(其实 vs 版本编译的差异不大,设置也基本相同) python 源码文件: Python-2.7.3.tgz 编译 (1)解压 Pyt ...

最新文章

  1. 大话IT职场之办公室环境重要吗?
  2. UBI 文件系统移植 sys 设备信息【转】
  3. 如何从MP4视频文件中抽取MP3音频?
  4. eclipse中测试Hibernate异常报 ORA-00926: 缺失 VALUES 关键字
  5. 更改WSSv3站点集访问地址
  6. Andriod anim scale中的属性介绍以及Animation类的属性
  7. 与优秀的人在一起进步:我发起的“乐学”分享活动
  8. 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方
  9. NoClassDefFoundError: org/apache/flink/api/scala/typeutils/CaseClassTypeInfo
  10. IDEA引MAVEN项目jar包依赖导入问题解决
  11. java点歌系统代码_基于jsp的KTV点歌系统-JavaEE实现KTV点歌系统 - java项目源码
  12. 大数定律和中心极限定理
  13. 灾难性的洪水帮助塑造了火星上的独特景观
  14. 简述no less than和not less than区别
  15. elasticsearch7.5 索引状态yellow问题解决
  16. 【科普】准大一新生如何挑选笔记本电脑
  17. kubernetes的基本概念及安装部署
  18. VI设计中系统视觉基本要素优漫动游
  19. 计蒜客 A1596.蒜头君王国 概率计算(dp)
  20. 磁悬浮惯性动量轮技术_第1章_绪论

热门文章

  1. 【2D目标跟踪】SIMPLE ONLINE AND REALTIME TRACKING阅读笔记(2017)
  2. 使用mysql_upgrade命令_mysql_upgrade命令
  3. css定位和xpath定位,selenium的css定位与xpath定位
  4. 【delphi】判断文件的编码方式(ANSI、Unicode、UTF8、UnicodeBIG)
  5. Linux黑洞路由命令,linux – Blackhole路由私有内部网流量
  6. bitcoin-cli命令行组装交易并成功广播
  7. 深度优先搜索python
  8. 编程日记-主要编程语言简介
  9. MSN spaces Beta
  10. MailUtil-Java发送邮件工具类