百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

阿里云主机源码编译安装python3常见错误处理

liuian 2024-12-27 15:15 44 浏览

关于源码编译安装python3环境网上有很多指导教程,一般按照步骤来执行的话都能够顺利完成安装,但是完成编译安装不代表python环境就真的没有问题了,在运行应用时也可能会抛出各种异常错误。比如以阿里ECS云主机(CentOS7.9操作系统)为例,编译安装python3.12环境之后运行python程序就可能遇到下面的异常:

import _ssl报错:

- ModuleNotFoundError: No module named '_ssl'

from smtplib import SMTP_SSL报错:

- ImportError: cannot import name 'SMTP_SSL' from 'smtplib'

使用sqlite3数据库报错:

- django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

出现上述错误的原因一般都是系统内置的软件工具版本和python解释器依赖相应工具的版本不匹配导致的,比如前面两个问题是因为阿里云主机默认安装的是openssl1.0.2版本,而python3.12要求更高的openssl版本。sqlite3数据库报错的信息很明显也是版本原因,内置的sqlite3版本不符合python3.12的版本要求。

如果python的版本不能降级的情况下,解决这些问题的办法就只能升级对应工具的版本。这里需要重点强调的是,升级这些工具的版本之后需要重新编译安装python3.12,否则问题还是会存在。接下来就把openssl升级、sqlite3升级、源码编译安装python3的步骤、重新编译python3所需的清理命令一一列举供遇到同样问题的朋友参考。

升级openssl

与python3.12版本匹配的版本可以选择openssl1.1.1

  1. wget https://www.openssl.org/source/openssl-1.1.1u.tar.gz 下载openssl源码包到指定目录
  2. tar -zxvf openssl-1.1.1u.tar.gz解压下载的源码包
  3. cd openssl-1.1.1u进入解压目录
  4. ./config --prefix=/usr/local/openssl1.1.1配置指定安装的目录
  5. make && make install执行编译并安装
  6. mv /usr/bin/openssl /usr/bin/openssl_bak备份旧版本openssl可执行文件
  7. ln -sf /usr/local/openssl1.1.1/bin/openssl /usr/bin/openssl创建软链接指向最新的openssl版本
  8. openssl version检查版本应该为1.1.1.1版本

升级sqlite3

这里以sqlite3.45.3版本为例介绍sqlite3升级步骤

  1. wget https://www.sqlite.org/2024/sqlite-autoconf-3450300.tar.gz 下载sqlite3源码包
  2. tar zxvf sqlite-autoconf-3450300.tar.gz解压源码包
  3. cd sqlite-autoconf-3450300进入解压目录
  4. ./configure --prefix=/usr/local配置安装路径
  5. make && make install编译并安装
  6. mv /usr/bin/sqlite3 /usr/bin/sqlite3_old备份旧版本的sqlite3可执行文件
  7. ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3创建软链接指向最新的sqlite3
  8. echo "/usr/local/lib" > /etc/ld.so.conf.d/sqlite3.conf创建sqlite3.conf文件,指定动态链接库的搜索路径为sqlite3新版本位置
  9. ldconfig更新动态链接库的缓存
  10. sqlite3 -version查询版本信息应该为3.45.3

重新编译清理命令

如果你找到这篇文章,说明你遇到和我一样的错误,显然你应该已经执行过源码编译python3解释器环境了。为修复这些错误,你需要重新编译安装python3,重新编译前建议清理编译安装记录以免出现不可预知的问题。

假设python3源码包解压后存放在Python-3.12.0目录中,编译安装路径为/usr/local/python3.12,如果你的路径不同请做相应的调整,重新编译安装清理操作命令如下:

  1. rm -rf /usr/local/python3.12删除安装目录
  2. make clean
  3. rm -rf build
  4. rm -rf config.cache

源码编译python3.12

这里以python3.12.0版本为例介绍源码编译安装步骤

  1. wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz 下载源码安装包
  2. tar -zxvf Python-3.12.0.tgz解压源码包
  3. cd Python-3.12.0进入解压路径
  4. ./configure --prefix=/usr/local/python3.12 --enable-shared --with-openssl=/usr/local/openssl1.1.1配置python3安装路径,指定openssl,--enable-shared表示启用共享动态链接库
  5. make && make install编译并安装
  6. ln -s /usr/local/python3.12/bin/python3 /usr/bin/python3创建软链接使得python3命令指向新版本
  7. ln -s /usr/local/python3.12/bin/pip3 /usr/bin/pip3创建软链接使得pip3命令指向新版本
  8. 如果在安装过程中遇到共享库加载问题,例如libpython3.12.so.1.0无法找到,可以尝试将相关的库文件复制到系统库目录中
    cp /usr/local/python3/lib/libpython3.12.so.1.0 /usr/lib64/
  9. 验证import _ssl是否正常,若正常说明问题已修复
[root@xxxx admin]# python3
Python 3.12.0 (main, Apr 16 2024, 22:29:05) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _ssl
>>> 

相关推荐

git的撤销、删除和版本回退_git撤销删除的文件

备注:本文参考于廖雪峰的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。知识点:1、gitstatus,查看git仓库的状态2、gitdiff查看git修改了的内容...

程序员开发必会之git常用命令,git配置、拉取、提交、分支管理

整理日常开发过程中经常使用的git命令!git配置SSH刚进入项目开发中,我们首先需要配置git的config、配置SSH方式拉取代码,以后就免输入账号密码了!#按顺序执行gitconfig-...

Git使用指南 | 教你轻松学会Git_git用法详解

4000字,教大家学会Git使用。一、Git基础1、Git介绍Git是目前世界上最先进的分布式版本控制系统。版本控制系统:设计师在设计的时候做了很多版本经过了数天去问设计师每个版本都改了些啥,设计师此...

深入浅出 Git_深入浅出 gRPC

git初体验使用git前需设置用户名和Email,这些信息会出现在提交记录中以标识作者。gitconfig--globaluser.name"YeHanlin"gitc...

Git不提交指定文件的方法_git不提交指定文件的方法有哪些

大家在开发项目的时候都很喜欢使用git作为代码管理工具,但是在开发项目的时候我们的本地配置文件不应该覆盖服务器中的配置文件,我们使用命令gitstatus查看待提交文件的时候需要注意不要把本地的配...

相见恨晚的 Git 命令动画演示,一看就懂

虽然Git是一个强大的工具,但是我觉得大部分人都会同意我说的:它也可以是一个……噩梦!我一直觉得,使用Git的时候把操作过程在脑海里视觉化会非常有用:当我执行某个命令的时候,分支之间是如何交互...

GitCode的一些命令_git命令大全

GitCode的一些命令配置工具对所有本地仓库的用户信息进行配置$gitconfig--globaluser.name"[name]"对你的commit操作设置关联的用户名$...

【git】 如何删除所有 tag(本地和远程)

要删除所有本地和远程的Git标签,可以按照以下步骤进行:删除本地标签首先,删除本地标签。你可以使用以下命令删除本地的所有标签:gittag-d$(gittag-l)这将列出并删除所有本地...

互联网大漏洞:每600个网站就有1个暴露了.git文件夹

对于Web开发人员来说,向外界暴露你的.git文件夹绝对是一个菜鸟级错误。因为这样会允许任何人下载你的整个源代码存储库,包括数据库密码、加密盐、Hash和第三方接口密钥API,还有你的用户名和密码。多...

git常用命令整理_git 常用

一、Git仓库完整迁移完整迁移,就是指,不仅将所有代码移植到新的仓库,而且要保留所有的commit记录1.随便找个文件夹,从原地址克隆一份裸版本库gitclone--bare旧的git地址...

项目常用GIT操作命令_git常用操作命令 简书

Git仓库更新依赖的命令:gradle--refresh-dependenciesgradleaR完全编译;./gradlewecomm:packages:telephony:larges...

【超详细】Git 所有常用命令 + 提交规范全指南(建议收藏!)

Git命令大全初始化类命令作用gitinit初始化一个本地Git仓库(当前目录会出现.git文件夹)gitclone<仓库地址>克隆远程仓库到本地,一般用来拉项目提交代...

Git 常用的alias命令大全_git -a

Git的alias(别名)功能可以将常用的复杂命令简化,大幅提升操作效率。以下是一些实用的Gitalias配置和常用示例:一、配置alias的方法通过gitconfig命令设置,分...

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教

导读:因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料。GitHub虽然有些许改版,但并无大碍。一、Git是什么?Git是目前世界上最先进的分布式版本控制系统。工作原理/流程:Work...

实用干货分享(3)- Git常用操作干货分享

官方学习地址https://git-scm.com/book/zh/v2简单的代码提交流程1.gitstatus查看工作区代码相对于暂存区的差别;2.gitadd.将当前目录下修改的所有...