当前位置: 首页 > news >正文

在Windows下自己从源码编译Python3.10.13成安装包

文章目录

  • (一)Python 3.10 的生命周期
  • (一)下载源码
  • (二)准备环境
  • (三)编译
    • (3.1)解压源码到目录
    • (3.2)下载依赖(PCBuild)
    • (3.3)下载依赖(MSI)
    • (3.4)漫长的编译
  • (四)完成和测试

(一)Python 3.10 的生命周期

呃,写这些文字的时候,Python目前最新的版本是3.12
手上不少项目正在用的3.10不再提供新的安装包了。

  • 根据 PEP 619 中指定的发布日历,Python 3.10 现在处于其生命周期的“仅安全修复”阶段:3.10 分支仅接受安全修复,并且这些安全修复程序的发布以仅源代码形式不定期发布。
  • 直到 2026 年 10 月,Python 3.10 不再收到常规的错误修复,并且不再为其提供二进制安装程序。
  • Python 3.10.11 是带有二进制安装程序的 Python 3.10 的最后一个完整错误修复版本。

本来可以就这样放着不管的……

但最近Golang和Java的项目依赖都在更新,解决了“暂时不敢告诉大家具体问题”的安全漏洞。
所以还是把Python也更新一下吧。

既然没有安装包,就只能自己从源码编译。
记得以前在Linux下编译过,不清楚Windows下怎么弄,正好学习学习。

💡为啥不升级3.113.12
因为Python不同小版本之间的包并不兼容(包带版本号就不兼容,除非是py3-none-any这种不分版本的)。
所以升级到3.11或12需要虚拟环境全部更新,好麻烦。并且还有可能某些包尚未提供3.12的对应版本。

(一)下载源码

🔗Python官网的3.10.13页面。
🔗Python仓库的3.10.13标签。

(二)准备环境

查了一下,不知道是不是这样的,大概需要:

  • Visual Studio 2022 桌面应用开发
  • Windows自带的.net3.5。
  • 微软.net6.0以上的SDK
  • git

正好都有,所以我什么都没额外安装。

(三)编译

(3.1)解压源码到目录

我下载的是Python-3.10.13.tgz,解压到任意目录,比如:x:\Python-3.10.13\目录中。
下面用%YourPath%代替。

(3.2)下载依赖(PCBuild)

执行:%YourPath%\PCbuild\get_externals.bat

PS x:\%YourPath\PCbuild> .\get_externals.bat
Installing Python via nuget...
Feeds used:https://api.nuget.org/v3/index.jsonInstalling package 'pythonx86' to 'x:\%YourPath\externals'.CACHE https://api.nuget.org/v3/registration5-gz-semver2/pythonx86/index.jsonCACHE https://api.nuget.org/v3/registration5-gz-semver2/pythonx86/page/3.5.2/3.8.1-c1.jsonCACHE https://api.nuget.org/v3/registration5-gz-semver2/pythonx86/page/3.8.1/3.10.4.jsonCACHE https://api.nuget.org/v3/registration5-gz-semver2/pythonx86/page/3.10.5/3.12.0.jsonAttempting to gather dependency information for package 'pythonx86.3.12.0' with respect to project 'x:\%YourPath\externals', targeting 'Any,Version=v0.0'
Gathering dependency information took 22 ms
Attempting to resolve dependencies for package 'pythonx86.3.12.0' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'pythonx86.3.12.0'
Resolved actions to install package 'pythonx86.3.12.0'
Retrieving package 'pythonx86 3.12.0' from 'nuget.org'.
Adding package 'pythonx86.3.12.0' to folder 'x:\%YourPath\externals'
Added package 'pythonx86.3.12.0' to folder 'x:\%YourPath\externals'
Successfully installed 'pythonx86 3.12.0' to x:\%YourPath\externals
Executing nuget actions took 1.58 sec
Using "x:\%YourPath\PCbuild\\..\externals\pythonx86\tools\python.exe" (found on nuget.org)
Fetching external libraries...
Fetching bzip2-1.0.8...
Fetching sqlite-3.40.1.0...
Fetching xz-5.2.5...
Fetching zlib-1.2.13...
Fetching external binaries...
Fetching libffi-3.3.0...
Fetching openssl-bin-1.1.1u...
Fetching tcltk-8.6.12.0...
Finished.
PS x:\%YourPath\PCbuild>

如果你会魔法或者网络条件很好,则直接执行命令没有问题。
如果和我一样只是普通的麻瓜,也许需要先这样:

  • 手动下载nuget.exe,并放入%YourPath%\externals\(可手动新建)中。
  • 修改PCbuild目录中的get_externals.batget_external.py
    https://github.com/改成https://ghproxy.com/https://github.com/
    或者任意其它办法能访问到git仓库就行。

总之日志中不要有报错就OK。

(3.3)下载依赖(MSI)

执行:%YourPath%\\Tools\msi\get_externals.bat

PS x:\%YourPath\Tools\msi> .\get_externals.bat
Installing Python via nuget...
Feeds used:https://api.nuget.org/v3/index.jsonInstalling package 'pythonx86' to 'x:\%YourPath\externals\windows-installer'.CACHE https://api.nuget.org/v3/registration5-gz-semver2/pythonx86/index.jsonCACHE https://api.nuget.org/v3/registration5-gz-semver2/pythonx86/page/3.5.2/3.8.1-c1.jsonCACHE https://api.nuget.org/v3/registration5-gz-semver2/pythonx86/page/3.8.1/3.10.4.jsonCACHE https://api.nuget.org/v3/registration5-gz-semver2/pythonx86/page/3.10.5/3.12.0.jsonAttempting to gather dependency information for package 'pythonx86.3.12.0' with respect to project 'x:\%YourPath\externals\windows-installer', targeting 'Any,Version=v0.0'
Gathering dependency information took 22 ms
Attempting to resolve dependencies for package 'pythonx86.3.12.0' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'pythonx86.3.12.0'
Resolved actions to install package 'pythonx86.3.12.0'
Retrieving package 'pythonx86 3.12.0' from 'nuget.org'.
Adding package 'pythonx86.3.12.0' to folder 'x:\%YourPath\externals\windows-installer'Added package 'pythonx86.3.12.0' to folder 'x:\%YourPath\externals\windows-installer'
Successfully installed 'pythonx86 3.12.0' to x:\%YourPath\externals\windows-installer
Executing nuget actions took 1.66 sec
Using "x:\%YourPath\Tools\msi\..\..\externals\windows-installer\pythonx86\tools\python.exe" (found on nuget.org)
Fetching external libraries...
Fetching external tools...
Fetching binutils...
Fetching gpg...
Fetching htmlhelp...
Fetching nuget...
Fetching redist-1...
Fetching wix...
Finished.
PS x:\%YourPath\Tools\msi>

(3.4)漫长的编译

我们要的结果是python的Windows x64安装程序。
执行:%YourPath%\Tools\msi\buildrelease.bat -x64 -o %YourPath%\PCbuild

这个命令也会先检查和准备依赖。
不过由于网络情况,我们前面单独下载了依赖,这时能安心一些。

编译时间较长,会输出大量的信息。
我这里有一堆警告,倒是没有报错。

最后得到了python-3.10.13-amd64.exe
在这里插入图片描述

(四)完成和测试

安装后一切正常。
在这里插入图片描述
查看版本号和命令行也没问题。

PS C:\> python -V
Python 3.10.13PS C:\> python
Python 3.10.13 (main, Oct 11 2023, 17:48:00) [MSC v.1937 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ^ZPS C:\>

跑个程序试试,功能正常,版本显示正常。
在这里插入图片描述

相关文章:

在Windows下自己从源码编译Python3.10.13成安装包

文章目录 (一)Python 3.10 的生命周期(一)下载源码(二)准备环境(三)编译(3.1)解压源码到目录(3.2)下载依赖(PCBuild&#…...

WIN10如何搭建自己的博客

引言: 路线说明: 在CSDN,博客园,简书等平台,可以直接在上面发表,用户交互做的好,写的文章百度也能搜索的到,这样速度也是最快的,不费心运营啥的。缺点是比较不自由&…...

uniapp 首页制作

uniapp拨打固定的电话 function Hotline() {// 拨打电话uni.makePhoneCall({phoneNumber: 19969547693})}页面跳转 //普通跳转function homepage() {uni.navigateTo({url: /pages/homepage/homepage});}//二、uni.redirectTo关闭当前页面,跳转到应用内的某个页面。…...

意大利航天飞行器公司【Sidereus】完成510万欧元融资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,位于意大利萨莱诺的航天飞行器公司Sidereus Space Dynamics今日宣布已完成510万欧元融资。 本轮融资由Primo Space和CDP Venture Capital Sgr领投,通过Italia Venture II - Fondo Impr…...

10-网络篇-DHCP获取的参数详解

一个设备接入路由器局域网时,是通过DHCP获取网络信息,从而完成网络配置的获取。如下图所示为windows系统通过DHCP所要获取的网络配置:IP、子网掩码、网关、DNS服务器。任何设备要上网前,都需要知道这几个参数,下面对这…...

MVCC底层原理

MVCC多版本并发控制机制 多版本多个undo日志 什么时候会获取到事务id 事务id的生成并不是通过begin/start/transaction命令得到的,是在执行第一个修改操作或者加入排他锁操作,才会向mysql申请真正的事务id,mysql内部是严格按照事务的启动顺…...

云原生Docker容器管理

目录 docker容器的管理 容器创建 查看容器的运行状态 启动容器 创建并启动容器 终止容器运行 删除容器 容器的进入 查看容器详细信息 复制到容器中 从容器复制文件到主机 容器的导出与导入 导出 导入 相当于一个进程,性能接近于原生,几乎没有损…...

1.Cesium For Unity插件安装

1.Unity安装 先安装Unity Hub,然后在里面安装Unity。 2.新建工程 新建项目 选择项目类型 3. 导入Cesium包 打开新建的项目,在菜单栏选择Edit->Project Settings->Package Manager.并添加Cesium的包信息。 Name: Cesium URL: https://unity.pkg.cesium.com Sco…...

浅述安防视频可视化场景中TSINGSEE青犀AI智能化应用的分析

随着社会的不断发展和安防需求的不断提升,安防视频可视化场景已经成为人们关注的焦点。而随着人工智能、大数据等技术的不断发展,智能化应用在安防视频可视化场景中的应用也越来越多。本文将分析安防视频可视化场景中的智能化应用,主要包括以…...

百度飞浆ResNet50大模型微调实现十二种猫图像分类

12种猫分类比赛传送门 要求很简单,给train和test集,训练模型实现图像分类。 这里使用的是残差连接模型,这个平台有预训练好的模型,可以直接拿来主义。 训练十几个迭代,每个批次60左右,准确率达到90%以上…...

多服务器云探针源码(服务器云监控)/多服务器多节点_云监控程序python源码

源码简介: 多服务器云探针源码(服务器云监控),支持python多服务器多节点,云监控程序源码。它是一款很实用的云探针和服务器云监控程序源码。使用它可以帮助管理员能够快速监控和管理各种服务器和节点,实用性强。 源码链接: 网盘…...

ESP8266 WiFi物联网智能插座—下位机软件实现

目录 1、软件架构 2、开发环境 3、软件功能 4、程序设计 4.1、初始化 4.2、主循环状态机 4.3、初始化模式 4.4、配置模式 4.5、运行模式 4.6、重启模式 4.7、升级模式 5、程序功能特点 5.1、日志管理 5.2、数据缓存队列 本篇博文开始讲解下位机插座节点的MCU软件…...

微信小程序--下拉选择框组件封装,可CV直接使用

一、起因 接到的项目需求,查看ui设计图后,由于微信小程序官方设计的下拉选择框不符合需求,而且常用的第三方库也没有封装类似的,所以选择自己自定义组件。在此记录一下,方便日后复用。 ui设计图如下: 微信官方提供的选择框 对比发现并不能实现我们想要的功能。 二、自定义组件…...

代码随想录算法训练营第五十九天 |647. 回文子串、516.最长回文子序列、动态规划总结篇

一、647. 回文子串 题目链接/文章讲解:代码随想录 思考: 1.确定dp数组(dp table)以及下标的含义 如果本题定义dp[i] 为 下标i结尾的字符串有 dp[i]个回文串的话: 会发现很难找到递归关系,dp[i] 和 dp[i-1]…...

互联网性能和可用性优化CDN和DNS

当涉及到互联网性能和可用性优化时,DNS(Domain Name System)和CDN(Content Delivery Network)是两个至关重要的元素。它们各自发挥着关键作用,以确保用户能够快速、可靠地访问网站和应用程序。在本文中&…...

使用 ErrorStack 在出现报错 ORA-14402 时产生的日志量

0、测试结论: 测试结果:设置 ErrorStack 级别为 1 时产生 Trace 的日志量最小,大小为 308K,同时在 alert 日志中也存在记录。 1、准备测试数据: sqlplus / as sysdba show pdbs alter session set containerpdb; …...

详解Spring-ApplicationContext

加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet。 这两者在功能上完全等同,只是一个是基于Servlet2.3版本中新引入的Listener接口实现,而另一个基于Servlet接口实现。开发中可根据目标Web容器的实际情况进行选择。 配…...

关键字extern、static与const

关键字extern、static与const extern关键字与include的区别 extern:于声明某个函数或变量是外部的(其他源文件中)include:用于批量引入 项目中可以根据需要引入的函数或变量数量决定使用extern还是include static关键字 static关键字用于限制函数和全局变量的作用域仅在当…...

虹科方案|国庆出游季,古建筑振动监测让历史古迹不再受损

全文导读: 国庆长假即将到来,各位小伙伴是不是都做好了出游计划呢?今年中秋、国庆“双节”连休八天,多地预计游客接待量将创下新高,而各地的名胜古迹更是人流爆满。迎接游客的同时,如何保障历史古迹不因巨大…...

Python学习笔记-使用哈希算法Hash,Hashlib进行数据加密

文章目录 一、概述1.1 哈希算法1.2 常见算法分类1.2.1 SHA算法1.2.2 MD4算法1.2.3 MD5算法 1.3 Hash算法的特性1.4 Hash算法的应用场景1.4.1 数据校验1.4.2 安全加密1.4.3 数字签名 二、Hash算法使用2.1 使用hash函数直接获取hash值2.2 使用hashlib库进行hash计算2.2.1 基本使用…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

dify打造数据可视化图表

一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 ​…...