centos7源码编译python3.12.3

2024-05-03 20:04

本文主要是介绍centos7源码编译python3.12.3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

centos7源码编译python3.12.3
{
1 下载
https://www.python.org/downloads/source/
选择最新的stable
2 解压
tar zxvf Python-3.12.3.tgz
3 配置
./configure --enable-optimizations
4 编译
make -j 8
出现错误:SystemError: <built-in function compile> returned NULL without setting an exception
解决:转centos源码编译高版本gcc
5 清理
make clean
6 重新配置
./configure --enable-optimizations
7 出现错误提示:configure: error: C compiler cannot create executables
解决问题的过程
{
  问题1:为什么新gcc不能创建可执行文件?
  写了一个打印helloworld的c文件,使用gcc编译
  出现错误提示:gcc: 致命错误:cannot execute ‘cc1’: execvp: 没有那个文件或目录
  问题2:cc1为什么找不到?
  查询cc1在哪
  [root@coco Downloads]# find / -name cc1
  /opt/gcc-13.2.0/libexec/gcc/x86_64-pc-linux-gnu/13.2.0/cc1
  查询gcc在哪
  [root@coco Downloads]# find / -name gcc
  /opt/gcc-13.2.0/libexec/gcc
  /opt/gcc-13.2.0/lib/gcc
  /opt/gcc-13.2.0/bin/gcc
  使用/opt/gcc-13.2.0/bin/gcc编译可以成功,但是使用复制过去的/usr/bin/gcc不能编译成功
  问题3:为什么复制过去的/usr/bin/gcc找不到cc1,而原目录里的gcc能找到cc1。
  卸载老版本的gcc
  yum remove gcc
  使用vim打开/etc/bashrc,在末尾加上export PATH="$PATH:/opt/gcc-13.2.0/bin"
  刷新/etc/bashrc
  source /etc/bashrc
  再次验证gcc
  成功编译helloworld。
  回答问题3:可能gcc是根据相对目录寻找cc1,这个是配置编译的时候决定的。如果是绝对目录寻找,反而不合理。
  为什么修改环境变量,相比把所有的文件都拷贝或移动到/urs目录,修改环境变量改动更小,只需加一行。复制文件会将系统变脏,后面难以恢复。
  回答问题2:因为gcc是按相对目录寻找cc1
  回答问题1:因为仅仅将高版本gcc复制到/usr/bin是不够的,它还需要它所依赖的环境才能正常工作
}
8 再次配置
./configure --enable-optimizations
9 再次编译
make -j 8
10 安装
make install

出现错误提示:raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/home/bibo/Downloads/Python-3.12.3/python', '-W', 'ignore::DeprecationWarning', '-c', '\nimport runpy\nimport sys\nsys.path = [\'/tmp/tmpt5apmxib/pip-24.0-py3-none-any.whl\'] + sys.path\nsys.argv[1:] = [\'install\', \'--no-cache-dir\', \'--no-index\', \'--find-links\', \'/tmp/tmpt5apmxib\', \'--root\', \'/\', \'--upgrade\', \'pip\']\nrunpy.run_module("pip", run_name="__main__", alter_sys=True)\n']' returned non-zero exit status 1.
make: *** [install] 错误 1
解决问题的过程
{
  问题1:为什么make install会出错?
  执行make altinstall,出现同样的问题提示。
  向上看,有其它问题提示:zipimport.ZipImportError: can't decompress data; zlib not available
  问题2:是不是因为zlib没有安装,这里的zlib是指zlib库吗,可以用yum安装吗?
  使用yum安装zlib
  [root@coco Python-3.12.3]# yum install zlib
  已加载插件:fastestmirror, langpacks
  Loading mirror speeds from cached hostfile
   * base: mirrors.aliyun.com
   * extras: mirrors.aliyun.com
   * updates: mirrors.aliyun.com
  软件包 zlib-1.2.7-21.el7_9.x86_64 已安装并且是最新版本
  无须任何处理?
  提示已安装
  问题3:是不是需要python依赖的zlib,python依赖的zlib怎样安装?
  安装zlib开发包
  yum install zlib-devel
  重新make
  make clean
  make -j 8
  问题4:make altinstall与make install的实际区别,实现原理?
  问题5:使用yum remove pyhon后为什么移python还在?
  出现同样的错误提示:ModuleNotFoundError: No module named 'zlib'
  重新配置编译,出现提示:Could not build the ssl module!
  虽然出现了新的问题,但是zlib的问题没有了。
  回答问题5:因为yum本身依赖python。执行yum remove python它是提示日志:错误:尝试移除受保护的 "yum"
  回答问题4:因为yum本事是依赖python的,并且是python2,现在安装python3,如果直接make install会把python2覆盖,导致yum出问题。make altinstall只不过是将文件命名为python3。
  回答问题3:直接yum install zlib-devel即可。就是普通的zlib开发包。python本身就是依赖c库的。
  回答问题2:可以用yum安装。
  回答问题1:因为缺少zlib。
}

  Python requires a OpenSSL 1.1.1 or newer
尝试解决此问题
{
  1 转centos7源码编译openssl1.1.1w,本文最后
  问题1:怎样源码编译openssl新版后,编译python时在新版与旧版共存时使用这个新版openssl?
  make clean
  ./configure --enable-optimizations
  make -j 8
  日志提示:Could not build the ssl module!
                   Python requires a OpenSSL 1.1.1 or newer
  问题2:Openssl已经安装好,怎样让他被别人找到?
  ./configure --help
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
查询openssl在哪
find / -name openssl
/usr/local/bin/openssl
/usr/local/include/openssl
/usr/lib64/openssl/engines

./configure --enable-optimizations --libdir=/usr/lib64/openssl/engines --includedir=/usr/local/include/openssl
make -j 8
  日志提示:[ERROR] _hashlib failed to import: libcrypto.so.1.1: cannot open shared object file: No such file or directory
此时python已经找到openssl了,到此这个问题结束。
  回答问题2:使用--includedir告诉python openssl的头文件opensllv.h在哪即可。
  回答问题1:配置python时使用参数--includedir指定新版openssl的头文件在哪。
}

日志提示:[ERROR] _hashlib failed to import: libcrypto.so.1.1: cannot open shared object file: No such file or directory
尝试解决此问题
{
[ERROR] _ssl failed to import: libssl.so.1.1: cannot open shared object file: No such file or directory
/usr/local/lib64/
make clean
./configure --enable-optimizations --libdir=/usr/local/lib64/ --includedir=/usr/local/include/openssl
make -j 8
  日志提示:[ERROR] _hashlib failed to import: libcrypto.so.1.1: cannot open shared object file: No such file or directory
说明告诉python libssl.so.1.1在哪依然无法导入。
[root@coco Python-3.12.3]# find / -name libcrypto.so.1.1
/usr/local/lib64/libcrypto.so.1.1
  问题1:怎样才能找到/usr/local/lib64/libcrypto.so.1.1
[root@coco Python-3.12.3]# openssl version
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
说明是openssl自己找不到依赖的动态库
[root@coco Python-3.12.3]# find / -name openssl
/usr/local/bin/openssl
[root@coco Python-3.12.3]# ldd /usr/local/bin/openssl
    linux-vdso.so.1 =>  (0x00007ffdd4946000)
    libssl.so.1.1 => not found
    libcrypto.so.1.1 => not found
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f0e17c92000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0e17a76000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f0e176a8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f0e17e96000)
[root@coco Python-3.12.3]# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
[root@coco Python-3.12.3]# ldd /usr/local/bin/openssl
    linux-vdso.so.1 =>  (0x00007ffe3a329000)
    libssl.so.1.1 => not found
    libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f4e8dddc000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f4e8dbd8000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4e8d9bc000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f4e8d5ee000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f4e8e2c1000)
[root@coco Python-3.12.3]# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
[root@coco Python-3.12.3]# openssl version
OpenSSL 1.1.1w  11 Sep 2023
make -j 8
  回答问题1:在openssl默认搜索动态库的目录里创建自己找不到的依赖的动态库的软链接。
./configure --enable-optimizations --includedir=/usr/local/include/openssl
make -j 8
  说明不需要指定库目录在哪。
  仅包含openssl的头文件所在目录即可找到它,不需要包含openssl的库目录。
}

日志提示:The following modules are *disabled* in configure script:
_sqlite3                                                       

The necessary bits to build these optional modules were not found:
_bz2                  _ctypes               _ctypes_test       
_curses               _curses_panel         _lzma              
_tkinter              _uuid                 readline           
To find the necessary bits, look in configure.ac and config.log.

Checked 111 modules (31 built-in, 69 shared, 1 n/a on linux-x86_64, 1 disabled, 9 missing, 0 failed on import)
make[1]: 离开目录“/home/bibo/Downloads/Python-3.12.3”
尝试解决此问题
{
安装_bz2
yum install bzip2-devel
安装_ctypes
yum install libffi-devel
安装_ctypes_test
yum install python3-devel(暂时不装,因为正在源码编译)
安装_curses
yum install ncurses-devel
安装_curses_panel
yum install ncurses-devel
安装_lzma
yum install xz-devel
安装 _tkinter
yum install tk-devel
安装 _uuid
yum install libuuid-devel(已安装)
安装 readline
yum install readline-devel
清理
make clean
配置
./configure --enable-optimizations --includedir=/usr/local/include/openssl
日志提示:checking for stdlib extension module _tkinter... missing
问题1:为什么安装了tk-devel,依然找不到_tkinter?重启后也找不到?
编译
make -j 8
日志提示:
The necessary bits to build these optional modules were not found:
_tkinter                                                       
To find the necessary bits, look in configure.ac and config.log.

Checked 111 modules (31 built-in, 77 shared, 1 n/a on linux-x86_64, 1 disabled, 1 missing, 0 failed on import)
make[1]: 离开目录“/home/bibo/Downloads/Python-3.12.3”
yum -y install tkinter
./configure --enable-optimizations --includedir=/usr/local/include/openssl
日志提示:checking for stdlib extension module _tkinter... missing
日志提示:Package libb2 was not found in the pkg-config search path.
 --libdir=DIR            object code libraries [EPREFIX/lib]
yum install python3-tkinter.x86_64
日志提示:checking for stdlib extension module _tkinter... missing
make -j 8
make altinstall
[root@coco Python-3.12.3]# echo $?
0
这次成功了,说明thinter找不到的问题可以忽略。
./configure --enable-optimizations --includedir=/usr/local/include/openssl --with-tcltk-includes="-I/usr/include" --with-tcltk-libs="-L/usr/lib64 -ltcl8.5 -ltk8.5"
日志提示:checking for stdlib extension module _tkinter... missing
--with-tcltk-includes, --with-tcltk-libs
回答问题1:不知道,放弃了。也许是它本身就不支持。
}
}

centos7源码编译openssl1.1.1w
{
1 下载
https://www.openssl.org/source/old/1.1.1/index.html
2 解压
tar zxvf openssl-1.1.1w.tar.gz
3 配置编译测试安装
./config
make
make test
{
出现错误日志:    /usr/bin/perl .././test/run_tests.pl  )
../test/recipes/01-test_abort.t .................... Dubious, test returned 2 (wstat 512, 0x200)
No subtests run
查看文档NOTES.PERL: - on Linux distributions based on RPMs, you will need to install
   'perl-core' rather than just 'perl'.
centos安装perl-core
安装
yum install perl-core.x86_64
}
make install
}

这篇关于centos7源码编译python3.12.3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957535

相关文章

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

CentOS7增加Swap空间的两种方法

《CentOS7增加Swap空间的两种方法》当服务器物理内存不足时,增加Swap空间可以作为虚拟内存使用,帮助系统处理内存压力,本文给大家介绍了CentOS7增加Swap空间的两种方法:创建新的Swa... 目录在Centos 7上增加Swap空间的方法方法一:创建新的Swap文件(推荐)方法二:调整Sww

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave