# 98.Python 编程中遇到的问题
经常使用Python编程,会遇到各种简单的问题,本文档就是记录,方便后续再次遇到。
# 1. urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compile
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with LibreSSL 2.8.3. See: https://github.com/urllib3/urllib3/issues/2168
原因和解决方案:
机器的openssl版本太低了,可以输入 openssl version查看ssl版本,需要大于1.1.1版本,可以升级下openssl到最新版本
查询urllib3/urllib (opens new window) 查看原因,主要是urllib3版本为v2.0,依赖openssl高版本,可以自己使用低于2.0版本的urllib3. 比如: #创建requirements.txt文件,写上 urllib3==1.24.3 指定urllib3版本,执行下面的命令 pip install -r requirements.txt
如果还是不行,可以看下urllib3是哪个依赖库下载的,例如我遇到的是依赖了request库,间接下载了urllib3,由于request下载的是2.30.0最新版本,依赖下载了urllib3 2.0版本,所以我指定了request为2.29.0版本,也解决了该问题.
pip install "requests==2.29.0"
# 2. Python Segmentation fault错误定位办法
有时候运行python脚本,会遇到Segmentation fault (core dumped) 错误,这个错误而且没办法被try-catch-exception 捕捉。那如何查看原因呢?
- Python3使用faulthandler
faulthandler在python3.3之后成为标准库,可以通过import到代码中启用,也可以直接通过命令行来启用。
import faulthandler
# 在import之后直接添加以下启用代码即可
faulthandler.enable()
# 后边正常写你的代码
2
3
4
5
直接通过命令行来启用,运行时添加-X faulthandler参数即可:
python3 -X faulthandler my_script.py
- Demo
import traceback
def test_segmentation_fault():
# 对于segmentation fault并不能catch到异常,即此处try没效果
try:
ctypes.string_at(0)
except Exception as e:
print(traceback.format_exc())
if __name__ == "__main__":
test_segmentation_fault()
2
3
4
5
6
7
8
9
10
11
12
13
14
相关链接:
# 3. Python 创建多个环境
Python应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的错误,或者可以使用库的过时版本的接口编写应用程序. 如果需要不同的环境,可以参考虚拟环境和包 (opens new window) 来构建不同的环境。
常用命令:
#创建环境
python -m venv llm-env
# 启用当前环境
source llm-env/bin/activate
# 安装依赖的包
pip install -r requirenments.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
2
3
4
5
6
7
8
# 4.pip3 install 报错-Can‘t connect to HTTPS URL because the SSL
通过pip 安装依赖包的时候,有时候需要配置第三方仓库。如果配置的https,可能会遇到 Can‘t connect to HTTPS URL because the SSL错误,原因是安装的python没有ssl。可以按照这个博客来配置ssl环境。linux安装python3(超详细)解决Can‘t connect to HTTPS URL because the SSL 的报错 (opens new window)