当前位置: 首页 > news >正文

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

这文章目录

    • 前情提要
    • 安装 openssl-1.1.1
    • 重新编译安装 python3.8
    • -rpath 编译选项介绍
    • python3.8 跟 python3.10 的区别
      • 那要怎么解决这个问题呢,我想到有四种解决方案:

前情提要

我在之前给 python3.10 安装 ssl 模块后以为该步骤 “对于 python3.6、python3.8 应该同样适用。” 。今天晚上我尝试给服务器安装一个带 ssl 模块的 python3.8 的时候,照着之前安装 3.10 的方案来,然后失败了-_-||。又折腾了一下,发现 3.8 和 3.10 的配置脚本是有区别的,不能一概而论,本文总结了一下 3.8 如何正确的编译安装 python 的 openssl 模块及其原理,以及 3.8 和 3.10 配置脚本的区别。

安装 openssl-1.1.1

下载openssl1.1.1

wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate 

解压

tar zxf openssl-1.1.1n.tar.gz

进入对应目录

cd openssl-1.1.1n

设置安装目录 可以自定义 但是要记住,后面会用到

./Configure --prefix=/usr/local/openssl 

./config --prefix=/usr/local/openssl

编译并安装

make -j && make install

将 /usr/local/openssl/lib 路径添加到系统动态库查找路径中,在 home 目录下的 .bashrc 文件最后面添加下面这一行

export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH

立即生效

souce .bashrc 

重新编译安装 python3.8

切换到 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 编译选项介绍

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

例如,假设有一个程序 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 新增选项的原因。

那要怎么解决这个问题呢,我想到有四种解决方案:

方法一 属于奇技淫巧,将动态库文件名实际指向静态库文件,即 ln -s libxxx.a libxxx.so,这样即使没有 -rpath 选项,也没关系了,因为跟 python 编译链接的是静态库,而静态库的路径已经由 --with-openssl=/usr/local/openssl 选项指定了。(不推荐)

方法二 可以修改 python 的编译脚本,强行指定 -rpath,这种做法和官方 3.10 做的效果一样。(不推荐)

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

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

这些目录是在系统启动时就被设置好的,当程序需要链接动态库时,系统会自动在这些目录中搜索相应的库文件。

方法四 就是本文所采用的方案,将 /usr/local/openssl/lib 添加到 LD_LIBRARY_PATH 环境变量中了,优雅且简单。(推荐)







tobybo

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

相关文章:

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

这文章目录 前情提要安装 openssl-1.1.1重新编译安装 python3.8-rpath 编译选项介绍python3.8 跟 python3.10 的区别那要怎么解决这个问题呢,我想到有四种解决方案: 前情提要 我在之前给 python3.10 安装 ssl 模块后以为该步骤 “对于 python3.6、pytho…...

阿里云99元ECS云服务器老用户也能买,续费同价!

阿里云近日宣布了2023年的服务器优惠活动,令用户们振奋不已。最引人瞩目的消息是,阿里云放开了老用户的购买资格,99元服务器也可以供老用户购买,并且享受续费的99元优惠。此外,阿里云还推出了ECS经济型e实例&#xff0…...

如何使用内网穿透实现远程公网访问windows node.js的服务端

使用Nodejs搭建简单的web网页并实现公网访问 前言 Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架。 Node.js自带运行时环境可在Javascript脚本的基础上可以解释和执行(这类似于JVM的Java字节码)。这个运行时允许在浏览器以外的任何机器上执行JavaScri…...

WordPress 媒体库文件夹管理插件 FileBird v5.5.4和谐版下载

FileBird是一款WordPress 按照文件夹管理方式的插件。 拖放界面 拖放功能现已成为现代软件和网站的标配。本机拖动事件(包括仅在刀片中将文件移动到文件夹以及将文件夹移动到文件夹)极大地减少了完成任务所需的点击次数。 一流设计的文件夹树展示 我们…...

websocket学习笔记【springboot+websocket聊天室demo】

文章目录 WebSocket是什么?为什么需要WebSocket?WebSocket和Http连接的区别WebSocket的工作原理基本交互过程: Java中的WebSocket支持WebSocket的优势springboot websocket themlef 一个聊天室demopom.xmlWebSocketConfigChatControllerWebController…...

echarts:graph图表拖拽节点

需求:实现一个可视化编辑器,用户可以添加节点,并对节点进行拖拽编辑,线条要用折线而不是用自带的直线 实现期间碰到很多问题,特意记录下来,留待将来碰到这些问题的同学,省去些解决问题的时间 问…...

Unity地面交互效果目录

大家好,我是阿赵。   之前写了几篇关于地形交互、地面轨迹、脚印效果实现的博文。虽然写的篇数不多,但里面也包含了不少基础知识,比如局部UV采样、法线动态混合、曲面细分等知识,这些都是可以和别的效果组合在一起,做…...

tcp的1对多模型C++处理逻辑

连接多个设备进行TCP连接,可以采取以下策略: 创建一个设备连接管理器:使用一个类或结构体来管理每个设备的连接。这个管理器应该包含设备的IP地址和端口号,以及一个连接到该设备的TCP连接。使用并发连接:使用并发的方式同时连接到所有设备。可以使用多线程或异步编程技术来…...

【Python】基础(学习笔记)

一、Python介绍 1、Python优点 学习成本低 开源 适应⼈群⼴泛 应⽤领域⼴泛 2、Python解释器 Python解释器作用:运行Python文件 Python解释器分类 CPython:C语⾔开发的解释器[官⽅],应⽤⼴泛的解释器。 IPython:基于CPyth…...

目标检测YOLO实战应用案例100讲-基于改进YOLO v5的排水管网缺陷智能识别(续)

目录 3.3构建方法 3.3.1样本库框架 3.3.2总体流程 3.3.3图像获取 3.3.4质量控制 3.3.5数据扩增...

《AI超级个体:ChatGPT与AIGC实战指南 》书籍分享

前言 ChatGPT是一款通用人工智能(AI)工具,使用过它的人都能感受到它的魅力。AI并不是一个新事物,它在全世界都发展很多年了,但在ChatGPT诞生之前,我们的AI只能算垂直AI,比如AlphaGo&#xff0c…...

C# 使用Microsoft.Office.Interop.Excel库操作Excel

1.在NuGet管理包中搜索:Microsoft.Office.Interop.Excel,如下图红色标记处所示,进行安装 2. 安装完成后,在程序中引入命名空间如下所示: using Microsoft.Office.Interop.Excel; //第一步 添加excel第三方库 usi…...

110.42.7.1ping IP延迟代表什么意思,自己延迟高会表示其他人也高延迟吗?

我们在使用服务器前,经常会有习惯性的Ping 服务器IP看下延迟。那这个延迟是什么意思呢? ping IP延迟一般是指在网络上发送一次数据包到目标IP地址并返回的时间,通常以毫秒计算。较小的延迟表示网络连接速度较快,较大的延迟则表示…...

【kafka】springboot工程能发消息,不能收消息

初学,起了一个springboot项目,写了一个生产者和一个消费者,能给集群kafka发消息,但是收不到,排查了种种!问题,结果时因为,springboot没能扫到我注册的component,我真服了…...

一文解码语言模型:语言模型的原理、实战与评估

在本文中,我们深入探讨了语言模型的内部工作机制,从基础模型到大规模的变种,并分析了各种评价指标的优缺点。文章通过代码示例、算法细节和最新研究,提供了一份全面而深入的视角,旨在帮助读者更准确地理解和评估语言模…...

【C++11】shared_ptr智能指针使用详解

系列文章目录 【C11】智能指针与动态内存 文章目录 系列文章目录简介一、头文件二、初始化1. make_shared2. 拷贝和赋值 三、实例 简介 shared_ptr 是一个类的模板,它使用引用计数的方式来管理一个动态分配的内存资源。shared_ptr 需要一个动态分配的对象时&#…...

JavaScript对象

在JavaScript中,对象是一种非常重要的数据类型。它们允许我们组织和存储相关的数据,并提供了一种灵活的方式来操作和访问这些数据。本文将介绍JavaScript对象的基本概念,包括创建对象、访问对象属性、对象的方法和构造函数,以及原…...

HTML5中自定义数据属性data-*属性(3)jq如何操作data-*

HTML5中自定义数据属性(1)data-*属性(1)data-*属性的使用HTML5中自定义数据属性(2):data-*的使用HTML5中自定义数据属性data-属性(3)jq如何操作data- 在 jQuery 中,可以使用 data() 方法来获取 data-* 属性的值。这个方法可以读取或设置 HTML 元素上的 …...

C#中.NET Framework4.8 Windows窗体应用通过EF访问新建数据库

目录 一、 操作步骤 二、编写EF模型和数据库上下文 三、 移植(Migrations)数据库 四、编写应用程序 五、生成效果 前文已经说过.NET Framework4.8 控制台应用通过EF访问已经建立的和新建的数据库。 本文想说的是,.NET Framework4.8 Win…...

LuatOS-SOC接口文档(air780E)--pack - 打包和解包格式串

pack.unpack( string, format, init) 解包字符串 参数 传入值类型 解释 string 需解包的字符串 string 格式化符号 ‘<’:设为小端编码 ‘>’:设为大端编码 ‘’:大小端遵循本地设置 ‘z’:空字符串 ‘p’:byte字符串 ‘P’:word字符串 ‘a’:size_t字符串 ‘A’:…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...

第14节 Node.js 全局对象

JavaScript 中有一个特殊的对象&#xff0c;称为全局对象&#xff08;Global Object&#xff09;&#xff0c;它及其所有属性都可以在程序的任何地方访问&#xff0c;即全局变量。 在浏览器 JavaScript 中&#xff0c;通常 window 是全局对象&#xff0c; 而 Node.js 中的全局…...