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

这篇具有很好参考价值的文章主要介绍了python3.8 安装 ssl 模块 和 _ctypes 模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前情提要

我在之前给 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

  • 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 编译并安装
  • 将 /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 编译选项介绍

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

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

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

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

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

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

  4. 方法四 就是本文所采用的方案,将 /usr/local/openssl/lib 添加到 LD_LIBRARY_PATH 环境变量中了,优雅且简单。(推荐)文章来源地址https://www.toymoban.com/news/detail-524677.html

到了这里,关于python3.8 安装 ssl 模块 和 _ctypes 模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python3.10编译安装报SSL失败解决方法

    1、升级openssl版本-编译安装 从官网下载OpenSSL文件 https://www.openssl.org/source/openssl-1.1.1n.tar.gz 2、下载后解压并编译 3、修改链接文件 4、添加路径至ld.so.conf 注意:路径最后不带“/”,否则报错 5、设置生效 6、查看OpenSSL版本 7、注意!注意!注意!这里有2个方法: 1、 修改Pyt

    2024年02月13日
    浏览(34)
  • Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题

    import _ssl # if we can\\\'t import it, let the error propagate ImportError: No module named _ssl 参考试了好多文章,发现都不太好使,最终找到了解决方案,安装openssl的依赖 centos安装python3.7时,查阅知需要的openssl版本最低为1.0.2,但是centos 默认的为1.0.1,所以需要重新 更新openssl 如果有网,直接在

    2024年01月22日
    浏览(34)
  • 完美解决Mac系统下python3第三方模块安装问题

    这个问题困恼了我一下午吧,知乎、b站、CSDN的都找遍了,给出的解答都是 模凌两可 的。之后是在CSDN中 结合了好几篇文章 ,才解决问题。     看在阿卷这么辛苦的份上,xdm给个 关注 和 点赞 不过分吧!     现在给大家分享出来,直接解决Mac系统下python3第三方模块安装

    2024年02月05日
    浏览(76)
  • Linux安装Python3.11以及解决openssl问题

    Linux系统:centos7 python版本:3.11 1、查看系统自带python 默认情况下,Linux会自带安装Python,可以运行python --version命令查看。 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了(Ctrl+D退出python命令窗口)。 2、查看Linux默认安装的Python位置 看到

    2024年02月09日
    浏览(36)
  • [pip无法连接HTTPS URL,因为SSL模块不可用]—— 解决方案

    [pip无法连接HTTPS URL,因为SSL模块不可用]—— 解决方案 在使用pip安装包时,你是否曾遇到过这个问题:“Can’t connect to HTTPS URL because the SSL module is not available”?如果是,那么你来对地方了。本文将为你提供一些可能的解决方案,让你轻松摆脱这个麻烦。 首先,我们需要了解

    2024年02月09日
    浏览(30)
  • 完美解决:Python3.10报错 No module named ‘_ssl‘

    报错详情: 操作系统为centos7,python版本为3.10.7,openssl版本为3.0.5,运行gunicorn报No module named \\\'_ssl\\\' 原因就是python3.10和openssl3.0.5的版本配置文件跟以前有点区别,python3.10的版本OPENSSL不再是/usr/local/ssl 的默认路径,变成了/path/to/openssl/directory,已经提示得很明白了让你在这里写入

    2024年02月12日
    浏览(33)
  • Python3报No module named ‘_ssl‘ 最简单解决办法

    安完Python3运行报 No module named ‘_ssl‘,搜的其他教程都让人改Python的Module/setup.dist文件,其实不用这么麻烦 CentOS自带的openssl有点老,建议下个新的 ①下载最新稳定版本的OpenSSL源码包 ②解压并切换目录 ③设定Openssl 安装 ④执行命令 ⑤执行make、make install,编译Openssl ⑥重新安

    2024年01月24日
    浏览(36)
  • centos python3 安装psycopg2 模块

    安装异常 先安装postgresql-devel 再安装 psycopg2库介绍 psycopg2库介绍: Psycopg2是一个用于Python编程语言的第三方库,用于访问PostgreSQL数据库系统。它提供了一组工具和方法,可以轻松地在Python程序中进行数据库操作,包括查询、插入、更新、删除等操作。 以下是Psycopg2库的一些主

    2024年02月16日
    浏览(33)
  • python3 爬虫相关学习1:安装requests模块

    目录 1 安装前:避免python2  python3 引起的问题 2 如何安装python3 2.1 直接上python3 官网下载 2.2 或者windows的话,microsoft store 里也可以下载 2.3 查看python版本 3 安装requests模块 3.1 很可能安装requests模块之前会遇到报错,需要先升级pip 3.2 安装 requests模块 4 开始使用 requests 模块 4.

    2024年02月05日
    浏览(52)
  • python3在window上运行或安装模块各种问题

    1. 在window上运行celery各种奇怪的问题 如出现错误: ValueError: not enough values to unpack (expected 3, got 0) 2. pip安装模块时,各种报错,无法安装 如安装模块:mysqlclient 、python-ldap等等,会有如下错误,请参考文中的三个步骤 1、python-ldapModulescommon.h(15): fatal error C1083 2、 error: command

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包