解决pip3安装第三方库无法使用ssl模块的问题

1.问题所在

我在centos7中安装了python3.8,在使用pip3安装一个第三方库的时候出现无法使用ssl的报错。
ssl模块确实在lib/python3.8这个目录下,为什么会报错呢,百度了一下才知道python中要使用ssl需要有openssl作为前置。
一般centos7中都是有openssl模块的,打开centos7自带的python2.7导入ssl发现正常,用python3.8导入却报错。
在这里插入图片描述
在这里插入图片描述
进入python3.8解压后的目录Python-3.8.0/Modules/Setup,编辑Setup文件,去掉下面几行的注释#
在这里插入图片描述

然后百度了解到,在编译安装完之后,执行的make命令虽然成功了,但是也会报出很多模块缺失的提醒。

$ make

... ...

Python build finished successfully!

The necessary bits to build these optional modules were not found:

_bz2 _curses _curses_panel

_dbm _gdbm _lzma

_sqlite3 _ssl _tkinter

readline

To find the necessary bits, look in setup.py in detect_modules() for the module's name.

编译安装目录下的setup.py文件保存着众多模块名,打开此文件搜索_ssl,可以看到是怎么调用ssl的,以下为其文件中ssl部分的代码。

843 # Detect SSL support for the socket module (via _ssl)

844 search_for_ssl_incs_in = [

845 '/usr/local/ssl/include',

846 '/usr/contrib/ssl/include/'

847 ]

848 ssl_incs = find_file('openssl/ssl.h', inc_dirs,

849 search_for_ssl_incs_in

850 )

851 if ssl_incs is not None:

852 krb5_h = find_file('krb5.h', inc_dirs,

853 ['/usr/kerberos/include'])

854 if krb5_h:

855 ssl_incs += krb5_h

856 ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,

857 ['/usr/local/ssl/lib',

858 '/usr/contrib/ssl/lib/'

859 ] )

860

861 if (ssl_incs is not None and

862 ssl_libs is not None):

863 exts.append( Extension('_ssl', ['_ssl.c'],

864 include_dirs = ssl_incs,

865 library_dirs = ssl_libs,

866 libraries = ['ssl', 'crypto'],

867 depends = ['socketmodule.h']), )

868 else:

869 missing.append('_ssl')

可以看到,setup.py会在’/usr/local/ssl/include’, ‘/usr/contrib/ssl/include/’ 这两个目录里面搜索’openssl/ssl.h’ 这个头文件,然后会在 ‘/usr/local/ssl/lib’ 和 ‘/usr/contrib/ssl/lib/’ 之中搜索 ssl 的 lib文件,搜索不到,会将_ssl加入missing这个数组里面,然后寻找missing调用的地方。
下面是setup.py中报错时候的输出,很明显,是由于搜索不到ssl.h头文件或者搜索不到lib文件而导致的报错。

313 if missing:

314 print()

315 print("Python build finished successfully!")

316 print("The necessary bits to build these optional modules were not "

317 "found:")

318 print_three_column(missing)

319 print("To find the necessary bits, look in setup.py in"

320 " detect_modules() for the module's name.")

321 print()

很奇怪,明明有openssl模块却找不到ssl.h头文件,然后百度得知,openssl只包含了可执行部分,openssl-devel才包含了头文件、头文件参考、某些库文件等跟开发相关的东西。所以只安装openssl是找不到相应的头文件的。

2.解决方法

执行以下命令,同时安装上述make命令提示缺少的模块以及openssl-devel

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

执行此命令时又出现了一个问题,yum命令报错了
在这里插入图片描述
这是因为yum采用python作为命令解释器,原来系统自带的python解释器为python2.7,我之前把python软连接给改成3.8的了,导致按python3.8解析2.7的语法出错了,编辑yum文件第一行,加上2.7。#!/usr/bin/python改成#!/usr/bin/python2.7

vim /usr/bin/yum

然后又报错了,还是修改,#! /usr/bin/python改成#! /usr/bin/python2.7

vim /usr/libexec/urlgrabber-ext-down

以上模块全部安装完之后,我删掉了python3.8重新安装编译,然后安装第三方库又报错。
报错信息:ModuleNotFoundError: No module named '_ctypes'
解决方法:yum install libffi-devel
然后在执行一遍make && make install就可以安装第三方库了。

### 如何在 Visual Studio 中为 Python 项目安装第三方库 在 Visual Studio (VS) 中为 Python 安装第三方库是一个常见的需求,以下是具体的方法以及解决可能遇到的问题。 #### 使用内置的包管理工具 Visual Studio 提供了一个集成的包管理界面来简化第三方库安装过程。可以在解决方案资源管理器中右键单击项目的名称并选择 **“添加” -> “从 PyPI 添加包...”** 的选项[^1]。这将打开一个对话框,在其中可以输入所需的库名(例如 `matplotlib`),然后点击安装按钮即可完成操作。 #### 命令行方式通过终端窗口执行 pip 命令 如果偏好命令行或者需要更复杂的配置,则可以直接利用 Visual Studio 自带的终端功能运行标准的 `pip install` 命令。确保当前活动环境已正确定义好之后,在集成开发环境中找到对应的终端面板,并输入如下形式的指令: ```bash pip install matplotlib --index-url=https://pypi.tuna.tsinghua.edu.cn/simple/ ``` 此例子特别指定了清华镜像源地址以规避国内网络连接不稳定带来的麻烦情况[^3]。 #### 解决 SSL 认证错误问题 当尝试访问某些特定镜像站点时可能会碰到类似于 `[SSL: WRONG_VERSION_NUMBER]` 这样的报错提示。这类现象通常是因为目标服务器端设置不兼容或者是本地安全策略限制所引起。一种可行的办法就是切换到其他可用的服务提供商;另外也可以考虑降级版本号较高的 OpenSSL 库文件至匹配程度更高的状态下来缓解冲突状况。当然最简单粗暴的方式莫过于临时关闭验证机制——不过出于安全性考量并不推荐这样做除非绝对必要的情况下才采用这种方法: ```bash pip install matplotlib --trusted-host pypi.tuna.tsinghua.edu.cn --index-url https://pypi.tuna.tsinghua.edu.cn/simple/ ``` 以上命令明确告知程序忽略主机真实性校验环节从而绕过潜在障碍物继续前进直至达成目的为止[^3]。 #### 验证安装成果 无论采取哪种途径实施部署动作结束后都应该重新启动应用程序实例以便加载最新改动内容进去生效范围之内去检验实际效果是否达到预期水平之上。可以通过编写一小段测试脚本来确认新加入的功能模块能否正常运作起来比如说绘制简单的图形之类的任务就可以轻松实现这一目标啦! ```python import matplotlib.pyplot as plt plt.plot([1, 2, 3], [4, 5, 6]) plt.show() ``` 这段代码将会展示一条直线图表出来证明 Matplotlib 成功导入并且能够正常使用了哦[^1]!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG_Bomd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值