【Python】ubuntu python>3.9编译安装,及多个Python版本并存的使用方法

【Python】ubuntu python3.9编译安装,及多个Python版本并存的使用方法

      • 1. 安装依赖
      • 2. 编译与安装
        • 2.1 依赖与源获取
        • 2.2 配置
        • 2.3 编译
        • 2.4 安装
        • 2.5 链接动态库

1. 安装依赖

更新系统软件
在正式开始之前,建议首先检查系统软件是否均为最新,并更新到最新版本。

打开一个终端,输入以下命令:

# 刷新软件包目录
sudo apt update
# 列出当前可用的更新
sudo apt list --upgradable
# 如上一步提示有可以更新的项目,则执行更新
sudo apt upgrade

安装 GCC 编译器
打开一个终端,使用 apt 安装 GCC 编译器:

安装 GCC 编译器
打开一个终端,使用 apt 安装 GCC 编译器:

可能需要的其他依赖:

# 刷新软件包目录
sudo apt update
# 安装依赖
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libbz2-dev liblzma-dev sqlite3 libsqlite3-dev tk-dev uuid-dev libgdbm-compat-dev

注意,Python 的部分功能依赖于对应的库(如 OpenSSL、SQLite3、LZMA 等),如果在编译时未能找到这些库,仍然可能完成编译。此时的 Python 解释器看似可以工作,但在需要使用特定功能时就会出问题。例如 OpenSSL 出现问题会导致无法正常使用 pip。故建议按本节提示安装所有可选依赖项,并在下一节编译时仔细检查有无报错信息。

2. 编译与安装

2.1 依赖与源获取

下载源代码地址
最好直接安装3.9以上,都是教训

下载 Python 3.10.12
sudo wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz
下载其他版本只需替换版本号数字

解压并进入该目录,后续的所有命令均在该目录中执行:

# 解压
tar -xf Python-3.9.12.tar.xz
# 进入该目录
cd Python-3.9.12/
2.2 配置
# 检查依赖与配置编译
sudo ./configure --enable-optimizations --with-lto --enable-shared

此处使用了三个可选配置项,含义如下:

–enable-optimizations:用 PROFILE_TASK 启用以配置文件主导的优化(PGO)
–with-lto:在编译过程中启用链接时间优化(LTO)
–enable-shared:启用共享 Python 库 libpython 的编译
更多可用配置项的信息,请参阅 Python 官方文档。

在这里插入图片描述

2.3 编译
# 编译,-j 后面的数字为参与编译的CPU核心数,根据个人机器配置调整
sudo make -j 6

编译结束后,注意仔细查看一下输出,检查可能存在的错误:

# 一种可能出现的问题:
$ sudo make
# ......省略部分输出......
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_dbm                  _tkinter              _uuid              
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
2.4 安装
# 安装二进制文件
sudo make altinstall

在这里插入图片描述
在这里插入图片描述

2.5 链接动态库

如果使用 sudo make install 直接安装就不需要,使用 # 安装二进制文件
sudo make altinstall 是需要的


### 3. 多版本兼容
[见blog python2与python3转换记录](https://blog.csdn.net/Darlingqiang/article/details/102963953?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170367136716800197013056%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170367136716800197013056&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-102963953-null-null.nonecase&utm_term=python%20%E5%85%BC%E5%AE%B9&spm=1018.2226.3001.4450)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/273685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

处理urllib.request.urlopen报错UnicodeEncodeError:‘ascii‘

参考:[Python3填坑之旅]一urllib模块网页爬虫访问中文网址出错 目录 一、报错内容 二、报错截图 三、解决方法 四、实例代码 五、运行截图 六、其他UnicodeEncodeError: ascii codec 问题 一、报错内容 UnicodeEncodeError: ascii codec cant encode charac…

IDEA2023创建web项目

一、新建项目 点击File->New->Project...,如果是第一次创建项目则单击New Project 二、添加Web Application 建好的样子 把web移动到main目录下同时改名为webapp 三、不存在Add Framework Support添加Web Application 如何存在Add Framework Support&#…

Java - 工厂设计模式

Java - 工厂设计模式 一. 简介二. 例子2.1 定义抽象类2.2 定义子类2.3 创建工厂2.4 测试 三. JDK中使用工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 工厂设计模式…

分享11 种有用的 JavaScript 技巧

今天这篇文章,我想与你分享 11个有用的JavaScript实用小技巧,它们将极大地提高你的工作效率。 1.生成随机颜色的两种方式 1).生成RandomHexColor const generateRandomHexColor () > {return #${Math.floor(Math.random() * 0xffffff)…

keras 人工智能之VGGNet神经网络的图片识别

VGG16结构图 上期文章我们分享了如何使用VGGNet CNN网络结构搭建一个图片识别网络,以及训练了神经网络模型,利用上期训练好的神经模型,可以进行我们的图片识别 图片识别结果 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import …

关于工业环网交换机的应用知识,你了解多少?

我将与大家分享关于环网交换机的应用知识。环网交换机是一种用于环网交换的交换机设备。从它的名字来看,可以推断出它具备环形网络的功能。工业环网交换机是一种专门用于工业领域的特殊交换机。它具有冗余性和可靠性等优点。 因此,许多工业通信领域开始…

Python——yolov8识别车牌2.0

目录 一、前言 二、关于项目UI 2.1、修改界面内容的文本 2.2、修改界面的图标和图片 三、项目修改地方 四、其他配置问题 一、前言 因为后续有许多兄弟说摄像头卡顿,我在之前那个MATS上面改一下就可以了,MAST项目:基于YOLOv8的多端车流检…

短视频矩阵系统:赋予用户创造与分享的力量

在如今快节奏的社交网络时代,人们对于信息获取和娱乐方式的需求也逐渐发生了变化。作为当下最受欢迎的短视频平台之一,抖音短视频矩阵系统正以其独特的魅力和吸引力,深深地打动着亿万用户。 抖音短视频矩阵系统是一种基于移动端的短视频分享…

【C Primer Plus第六版 学习笔记】第十四章 结构和其他数据形式

有基础,进阶用,个人查漏补缺 建立结构声明:描述该对象由什么组成,即结构布局 格式: 关键字 标记(可选){结构 }; 举例: struct book{char title[2];char author[4];float …

保护电脑安全,火绒安全助手 V5.0

火绒安全软件,也称为“火绒安全助手”是一款由中国研发的综合安全软件。火绒安全软件旨在为计算机用户提供全面的安全保护,包括防病毒、反恶意软件、网络安全、系统优化等功能。 火绒安全的功能 病毒防护:火绒提供实时的病毒和恶意软件扫描…

年度征文|回顾2023我的CSDN

一年转眼而逝,回顾这一年在csdn的创作,学习,记录历程。回顾过去,才能展望未来,首先看图说话。 今年在csdn的访问量已由年初的2万到年末的50w。粉丝有年初的300个左右,增加到4000个左右。我年初的目标是粉丝…

nvm安装版本后设置默认镜像地址和nvm list available出现空白解决办法

如题 npm config get registry https://registry.npmjs.org/发现镜像地址依旧是默认的 解决 运行输入npm config list 查看这个选项对应的目录 修改为的内容如下 homehttps://npmmirror.com registryhttps://registry.npmmirror.com/或者也可以 homehttps://npmmirror.com…

【nw.js】使用nw.js将html页面打包成exe免安装程序

文章目录 一、批处理zip命令(已有可跳过此步骤)二、nw.js包三、使用批处理命令打包成exe可执行文件四、使用EnigmaVB打包成免安装可独立运行的exe文件五、结束 一、批处理zip命令(已有可跳过此步骤) 下载zip,你可以到该…

【Java并发篇】什么是多线程中的上下文切换?

多线程中的上下文切换 ✔️ 简述✔️拓展知识仓✔️减少上下文切换 ✔️ 简述 上下文切换是指 CPU 从一个线程转到另一个线程时,需要保存当前线程的上下文状态,恢复另一个线程的上下文状态,以便于下一次恢复执行该线程时能够正确地运行。 在…

嵌入式面试准备

题目都摘于网上 嵌入式系统中经常要用到无限循环,如何用C编写死循环 while(1){}或者for(;😉 内存分区 代码区,全局区(全局变量,静态变量,以及常量),栈区,堆区 const关键…

[SWPUCTF 2021 新生赛]sql

[SWPUCTF 2021 新生赛]sql wp 输入 1 正常回显: ?wllm1 返回: Want Me? Cross the Waf Your Login name:xxx Your Password:yyy输入单引号引发报错: ?wllm1 返回: Want Me? Cross the Waf You have an error in your SQL s…

指点云 宁波大带宽大存储云服务器 性能评测

指点云 浙江宁波 云服务器 性能测评,2核4G 100兆带宽 240G存储 5G防御 仅需76.8元/月;4核8G仅需112.8元/月。 官网地址:https://url.vpszj.cn/zhidianyun 优惠注册地址:https://url.vpszj.cn/zhidianyun_r 性价比高的服务器推荐…

【产品设计】零代码核心模块之三:报表

报表的用于数据和信息呈现的一种方式,能够帮助人们更直观地了解数据和信息,从而做出更明智的决策。本文从报表的价值、产品功能以及数据统计分析出发,探讨报表的重要性与使用场景,希望对你有所启发。 报表适用于需要呈现数据或信息…

Spring高手之路-Spring支持的注入方式、Spring为什么不建议使用基于字段的依赖注入

目录 Spring支持的注入方式 1.字段注入 2.构造器注入 3.setter注入 使用构造器注入存在的问题 Spring为何不建议使用基于字段的依赖注入 1.单一职责问题 2.可能产生NPE(空指针异常) 3.隐藏依赖 4.不利于测试 Spring支持的注入方式 1.字段注入 A…

k8s的二进制部署: 源码包部署-----node节点部署

服务器IP软件包k8s--master0120.0.0.61kube-aplserver,kube-controer-manager,kube-scheduler,etcdk8s--master0220.0.0.62kube-controer-manager,kube-schedulernode节点0120.0.0.62kubelet,kube-proxy,et…