python3.8 安装 ssl 模块 和 _ctypes 模块

news2024/11/21 0:39:12

文章目录

    • 前情提要
    • 安装 openssl-1.1.1
    • 重新编译安装 python3.8
    • -rpath 编译选项介绍
    • python3.8 跟 python3.10 的区别

前情提要

在我成功给 python3.10 安装 ssl 模块后自以为是的写下了 “虽然我编译的是 python3.10,但是对于 python3.6、python3.8 应该同样适用。” 这句话。今天晚上我尝试给压测服务器安装一个带 ssl 模块的 python3.8 的时候,照着自己写的博客一步步来,然后失败了-_-||。

安装 openssl-1.1.1

  • wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate 下载openssl1.1.1
  • tar zxf openssl-1.1.1n.tar.gz 解压
  • cd openssl-1.1.1n
  • ./Configure --prefix=/usr/local/openssl 设置安装目录 可以自定义 但是要记住,后面会用到
  • make -j && make install 编译并安装
  • cd /usr/local/openssl/lib
  • mv libcrypto.so libcrypto.so.1 修改动态库名字,随便改一下就行,当一个备份
  • mv libssl.so libssl.so.1 同上
  • ln -s libcrypto.so libcrypto.a 创建一个假动态库,实际上是静态库的软链接
  • ln -s libssl.so libssl.a 同上

重新编译安装 python3.8

我的版本是 python3.8.0 ,其他版本不保证有效-_-||

  • 切换到 python3.8 解压包目录
  • 已经编译过的可以先 make clean 清理一下
  • yum install libffi-devel -y 安装 libffi-devel ,这个是为了 _ctypes 模块
  • ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl --with-ssl-default-suites=openssl --with-system-ffi
  • make -j && make install

到这应该安装成功了,如果还有问题的话留言讨论吧-_-||

-rpath 编译选项介绍

-rpath 是 gcc 的一个编译选项,用于指定程序运行时动态链接库的搜索路径。当程序运行时需要动态链接库时,系统会在指定的路径中搜索动态链接库。

例如,假设有一个程序 a.out,它需要动态链接库 libfoo.so,而 libfoo.so 位于 /usr/local/lib 目录下,那么可以使用以下命令编译程序:

gcc -o a.out a.c -L/usr/local/lib -lfoo -Wl,-rpath=/usr/local/lib

其中,-L 选项指定编译器在编译时搜索库文件的路径,-l 选项指定需要链接的库文件名。-Wl,-rpath=/usr/local/lib 选项指定程序运行时搜索动态链接库的路径。

这样,当程序 a.out 运行时,系统会在 /usr/local/lib 目录下搜索 libfoo.so 动态链接库。

python3.8 跟 python3.10 的区别

查看 python3.8 配置脚本关于 openssl 的帮助信息
在这里插入图片描述
查看 python3.10.3 配置脚本关于 openssl 的帮助信息
在这里插入图片描述
python3.10.3 中多出来的这个选项是说是否在 gcc 编译的时候传递 -rpath 选项给编译器,所以可以按我这篇文章中的做法处理。
python3.8 的配置脚本没有这个选项,但是他编译过程中又查找的是名为 libssl.so 的动态库。这时候我们不能传递 -rpath=/usr/local/openssl/lib, 只能采取其他办法,想来这也是 3.10 新增选项的原因。
那要怎么解决这个问题呢,我想到有四种解决方案:

  • 就是我上面所做的那样,将动态库文件名实际指向静态库,这样即使没有 -rpath 选项,也没关系了,因为跟 python 编译链接的是静态库,而静态库的路径已经由 --with-openssl=/usr/local/openssl 选项指定了。

  • 修改 python 的编译脚本,强行指定 -rpath,这种做法和官方 3.10 做的效果一样。

  • 在系统的动态库默认搜索路径下创建一个指向 /usr/local/openssl/lib/ 下两个需要的动态库的软链接。
    Linux系统默认的C动态库搜索目录包括以下几个:

    /lib
    /usr/lib
    /usr/local/lib
    

    这些目录是在系统启动时就被设置好的,当程序需要链接动态库时,系统会自动在这些目录中搜索相应的库文件。如果你想添加其他目录到动态库搜索路径中,可以使用 LD_LIBRARY_PATH 环境变量来实现。

  • 如上一个方法末尾所说那样,将 /usr/local/openssl/lib 添加到 LD_LIBRARY_PATH 环境变量中,这样做感觉是最合理的解决方案了。读者可以自己尝试这几种方案,因为我用 python 并不深入,只是作为工作中的工具使用,能用就行,有问题再说。

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

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

相关文章

chatgpt赋能Python-python3_0怎么安装

Python3.0怎么安装 Python3.0是一个优秀的编程语言,其简单易学,易用性强,且具有强大的功能和广泛的应用。如果您需要在您的电脑上使用Python3.0,本文将为您介绍如何进行安装。 下载Python3.0 首先,您需要从官方网站…

教育不得不改变,ChatGPT可以提供个性化学习

近日,OpenAI的首席执行官Sam Altman接受ABC新闻首席商业、技术和经济记者Rebecca Jarvis的独家采访。Sam Altman提到了对错误信息的担忧、探讨了人工智能与人类工作的关系、ChatGPT与教育的关系等。 ChatGPT今年1月面世后,在短短几个月内就达到了1亿月活…

代码随想录训练营Day43| 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

目录 学习目标 学习内容 1049. 最后一块石头的重量 II 494. 目标和 474.一和零 学习目标 1049. 最后一块石头的重量 II 494. 目标和 474.一和零 学习内容 1049. 最后一块石头的重量 II 1049. 最后一块石头的重量 II - 力扣(LeetCode)https://l…

【云计算与虚拟化】第三章 实验二 在ESXi主机中安装操作系统

实验二 在ESXi主机中安装操作系统 为ESXi主机添加一块数据存储磁盘,大小为80G,磁盘名称为:ESXi-loc-80G(截图) 2.登录vSphere Client,加载新添加的数据存储磁盘,加载大小为60G,并将…

网络编程——嵌入式(驱动)软开基础(五)

1. 列举一下OSI协议的各种分层。说说你最熟悉的一层协议的功能。 (1)七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 (2)五层划分为:应用层、传输层、网络层、数据链路层、物理层。 (3)四层划分为:应用层、传输层、网络层、网络接口层。(…

springboot+java+jsp校园二手书旧书交易交换系统

前台功能:用户进入系统可以对首页、书籍信息、校园公告、个人中心、后台管理等功能进行操作; 后台主要是管理员,管理员功能包括主页、个人中心、学生管理、发布人管理、书籍分类管理、书籍信息管理、交易信息管理、交换信息管理、系统管理等&…

Linux运维常用grep命令使用

grep 命令是 Linux 运维中非常常见的文本搜索工具 常用的使用方法如下: 1、查找包含指定字符串的行 grep "pattern" file.txt 其中,pattern 是要查找的字符串,file.txt 是要搜索的文件名。 2、查找不包含指定字符串的行 grep -v…

chatgpt赋能Python-python3_9_2怎么换行

Python 3.9.2 换行方法 Python 3.9.2 已经出现了,除了一些修复和新功能,Python 3.9.2 还包括了一些在换行方面的改进。在本文中,我们将介绍 Python 3.9.2 中换行的新方法。 换行符 在 Python 3.9.2 中,我们可以使用换行符来实现…

chatgpt赋能Python-python3_10下载安装

Python3.10:开发者首选 对于每个开发者来说,选择合适的编程语言是至关重要的。在众多可供选择的编程语言中,Python一直是最受欢迎的选择之一。为什么Python如此受欢迎?因为其简单易学、代码可读性强、广泛的库支持和适用于各种应…

【Git相关命令】

git全局设置 作用是用于描述git使用者的身份。注意,设置的用户名和邮箱跟代码托管平台的用户名和邮箱没有任何关系。 git config --global user.name "用户名" git config --global user.email "邮箱地址"获取git仓库 方式1:将本地的…

【5.18】二、黑盒测试方法—边界值分析法

目录 2.2 边界值分析法 2.2.1 边界值分析法概述 2.2.2 实例:三角形问题的边界值分析 2.2.3 实例:余额宝提现的边界值分析 2.2 边界值分析法 程序的一些错误往往发生在边界处理上,这是因为程序开发时对边界问题没有做好处理。边界值分析法…

视频剪辑要学什么软件 视频剪辑要学些什么

这几年短视频行业迅速出圈,不少人都想加入这片红海,但是在剪辑这块儿却卡住了。众所周知,想要发短视频,会视频剪辑是很重要的。那么视频剪辑要学什么软件,视频剪辑要学什么?下面我们来分享一下相关知识。一…

JAVA日常练习—习题5

1.机器人类及其子类 设计一个机器人的抽象类,具有质量(double)、名字(String)等属性;具有设置属性值方法和获得并打印属性值的方法,还有一个运动的抽象方法move()。设计电动汽车类和飞行器类&a…

【STM32G431RBTx】备战蓝桥杯嵌入式→决赛试题→第十届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置,直接使用提供的资源包就行 2.双ADC:开启双ADCsingle-ended 3.LED:开启PC8-15,PD2输出模式就…

chatgpt赋能Python-python3_6安装keras

在Ubuntu 16.04上安装Keras Keras是一个非常流行的Python深度学习库,它可以让你高效地构建和训练深度神经网络。在本指南中,我们将介绍如何在Ubuntu 16.04上安装Keras,并建立一个简单的基于CNN的图像分类器。 准备工作 在安装Keras之前&am…

MySQL 基础篇 1.1 执行一条SQL语句会发生什么

1. MySQL架构一共分为两层 server 和 存储引擎层(一般为Innodb引擎) 主要执行流程都在server层:连接器,查询缓存,解析SQL(解析器),执行SQL(预处理器,优化器&a…

2023年ES的使用总结

1.Elasticsearch 非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容 什么是elasticsearch 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控 什么是elastic stack 是以elasticsearch为核心的技术栈&#xf…

运算符重载函数作为类的成员函数——有理数的约分

目录 一、题目 二、代码 三、算法分析 (一)数学表达式 (二) 代码实现 一)运算符重载函数 二)优化函数(实现有理数约分) 一、题目 通过运算符重载为类的成员函数来实现两个有…

【云计算与虚拟化】第二章 实验一 VMware Workstation的使用

实验一 vmware workstation的使用 安装Windows Server 2012 R2虚拟机,并激活(计算机命名为:学号姓名拼音的首字母) 2.在Windows Server 2012 R2的虚拟机中安装VMTools 3.关机创建快照(快照命名为:学号姓名…

OMG Data Distribution Service(DDS)规范解读-Part4

目录 2.4 Listeners, Conditions, and Wait-sets2.4.1 Communication Status2.4.2 Changes in Status2.4.2.1 Plain communication statuses2.4.2.2 Read Communication Statuses 2.2.4.3 Access through Listeners2.2.4.3.1 Listener Access to Plain Communication Status2.2…