首页 > 编程语言 >Python编译升级3.7.x

Python编译升级3.7.x

时间:2023-12-11 18:23:30浏览次数:42  
标签:编译 Python openssl 3.7 usr https local

CentOS 7自带的Python为3.6.x,但因项目需要,要升级到3.7.x,记录遇到的一些问题。

Python3.7.x需要先升级OpenSSL到1.1.x后的版本,否则会报下面的错误

WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

1. OpenSSL升级到1.1.x

1.1. 下载解压OpenSSL

OpenSSL 官方下载地址:https://www.openssl.org/source/

tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

1.2. 编译安装

./config --prefix=/usr/local/openssl
make && make install

1.3. 备份并替换当前系统版本

mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/lib64/openssl /usr/lib64/openssl.old
mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
openssl version // 建立动态链接

1.4. 查看OpenSSL版本

openssl version

2. 安装Python 3.7.x

2.1. 下载解压

wget https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tgz
tar -zxvf openssl-1.1.1w.tar.gz
cd Python-3.7.17

2.2. 编译安装

./configure --prefix=/usr/local/python3.7 --with-openssl=/usr/local/openssl
make && make altinstall

2.3. 指定国内镜像源

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

3. 其他问题

安装完成后运行脚本,抛出以下异常:

File "/usr/local/python3/lib/python3.7/ctypes/__init__.py", line 7, in <module> from _ctypes importUnion, Structure, Array ModuleNotFoundError: No module named '_ctypes'

原因:Python3中有个内置模块叫ctypes,它是Python3的外部函数库模块,它提供兼容C语言的数据类型,并通过它调用Linux系统下的共享库(Shared library),此模块需要使用CentOS7系统中外部函数库(Foreign function library)的开发链接库(头文件和链接库)。
由于在CentOS7系统中没有安装外部函数库(libffi)的开发链接库软件包,所以在安装pip的时候就报了"ModuleNotFoundError: No module named '_ctypes'"的错误。

yum install libffi-devel
# 然后执行步骤2,重新安装Python

参考

  1. https://github.com/actions/setup-python/issues/93#issuecomment-716433622
  2. https://www.cnblogs.com/fanbi/p/12375023.html
  3. https://www.jianshu.com/p/8e476eef43f7

标签:编译,Python,openssl,3.7,usr,https,local
From: https://www.cnblogs.com/bigt/p/17895085.html

相关文章

  • Python爬虫获取校园课表(强制系统举例)
    Http:超文本传输协议Https:安全的http首先引入request库:pipinstallrequests 先F12打开页面检查,在network(网络)里面,然后刷新页面,会发先有个请求文档,点击并观察它:在常规里面可以看到请求地址为https://www.paisi.edu.cn:8181/jsxsd/?tdsourcetag=s_pcqq_aiomsg,将它复制到......
  • Python_Gui_tkinker学习笔记
    #-*-coding:utf-8-*-importtkinterastk创建主窗口#调用Tk()创建主窗口root_window=tk.Tk()窗口名字#给主窗口起一个名字,也就是窗口的名字root_window.title('C语言中文网:c.biancheng.net')打开窗口#开启主循环,让窗口处于显示状态root_window.mainloop()创......
  • Python和C++之间
    编程语言编程语言创造来都是为了解决实际问题的了解一门第二,甚至第三语言。因为只有你了解了不同工具的特性,以及它们擅长解决的问题,你才能更高效地在日常工作中运用它们。为问题选择正确的语言/工具/解决方案,将能大大减少解决问题所需的工作量训练你习惯跳出一种语言或范式的......
  • Python函数
    【一】函数的定义和使用函数可以提高代码可读性方便维护函数的使用必须遵循’先定义,后调用’的原则。函数的定义就相当于事先将函数体代码保存起来,然后将内存地址赋值给函数名,函数名就是对这段代码的引用,这和变量的定义是相似的。没有事先定义函数而直接调用,就相当于......
  • 使用Python合并多个Excel文件
    合并Excel可以将多个文件中的数据合并到一个文件中,这样可以帮助我们更好地汇总和管理数据。日常工作中,合并Excel主要有以下两种需求:将多个Excel文件合并为一个文件将多个Excel工作表合并为一个工作表这篇文章将介绍如何使用第三方Python库Spire.XLSforPython实现以上两种......
  • 扫描并清除重复文件的Python脚本
    电脑里存的照片越来越多,其中有很多是重复的。如果依赖人边去一张一张对比,需要的工作量太大了。下面的Python脚本在一个目录树上递归地对所有文件作MD5校验,将重复的文件找出来。保留用户指定的文件,将多余的文件全部删除掉。#!/usr/bin/envpython3importsysimporthashlibim......
  • node调用python输出中文乱码问题
    问题描述使用node的children_process模块调用python脚本文件,出现输出信息为乱码问题//node脚本const{spawn}=require('child_process');constpythonProcess=spawn('python',['./test.python']);pythonProcess.stdout.on('data',(data)=>{......
  • Python_数据结构的应用heap
    数据结构栈-->stack队列-->queue树-->tree堆-->heap散列-->hash图-->graph图结构一般包括顶点和边邻接矩阵DAG,DirectedAcyclicGraph即「有向无环图」树树(Tree)是一种非线性的数据结构,由n个节点组成,其中每个节点都有零个或多个子节点。......
  • python数据类型元组、列表、集合、字典相互嵌套
    系统Windows10专业工作站版22H2软件python-3.9.6-amd64.exe拓展库:jupyter==1.0.0notebook==7.0.61.元组嵌套1.1元组嵌套元组try:tuple0=((1,2,3),(1,2,3),(1,2,3))print(tuple0,type(tuple0))except:print('error')((1,2,3),(1,2,3),(1,2,......
  • map(python中的字典)
    //创建一个空的map,键是字符串类型,值是整数类型myMap:=make(map[string]int)//创建有值的map//初始化并赋值myMap:=map[string]int{"apple":1,"banana":2,"orange":3,}//添加修改元素myMap["grape"]=4//添加元素myMa......