Windows Visual Studio 2019 编译 Python 3.7.12 及 Python 3.10.0 源码
Posted 魏晓蕾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows Visual Studio 2019 编译 Python 3.7.12 及 Python 3.10.0 源码相关的知识,希望对你有一定的参考价值。
1、Python源码下载
- Python 源码下载地址:https://www.python.org/downloads/source/
- Python 3.7.12 源码下载地址:https://www.python.org/downloads/release/python-3712/
- Python 3.10.0 源码下载地址:https://www.python.org/downloads/release/python-3100/
2、源码压缩包解压
- Python-3.7.12.tgz 解压目录:H:\\VisualStudioWorkspace\\Python-3.7.12
- Python-3.10.0.tgz 解压目录:H:\\VisualStudioWorkspace\\Python-3.10.0
3、Python 3.7.12 源码编译
- Visual Studio 2019 打开 Python 3.7.12 源码项目,打开位置为:H:\\VisualStudioWorkspace\\Python-3.7.12\\PCbuild\\pcbuild.sln。
- Python 3.7.12 源码是 Visual Studio 2015 项目,需要重定目标解决方案为 Visual Studio 2019,否则不能编译运行。点击确定。
- 在解决方案上右键,点击属性,弹出属性对话框。确保属性对话框中所有模块的“生成”全部选中。
- 点击“本地Windows调试器”,编译运行 Python 3.7.12 源码。
- 编译完成,弹出 Python 交互式界面。
- 修改源码:打开 pythoncore 模块中的 Objects/longobject.c 文件,找到 1763 行左右的 long_to_decimal_string() 函数,整数输出时会调用该方法,在函数中添加如下代码:
static PyObject *
long_to_decimal_string(PyObject *aa)
{
PyObject *v;
if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
return NULL;
printf("Python3.7.12源码修改\\n"); // Added
return v;
}
- 清理解决方案后,点击“本地 Windows 调试器”,编译运行修改后的 Python 3.7.12 源码,弹出交互式界面,使用整数交互,即可输出上述添加的代码。
4、Python 3.10.0 源码编译
方案一:出现报错
- 运行 H:\\VisualStudioWorkspace\\Python-3.10.0\\PCbuild\\build.bat,通过 Python 3.10.0 源码自带的批处理文件进行源码编译。
- 编译完成,命令行窗口消失,用 Visual Studio 2019 打开 Python 3.10.0 源码,打开路径为:H:\\VisualStudioWorkspace\\Python-3.10.0\\PCbuild\\pcbuild.sln。
- 在解决方案上右键,点击“属性”,打开属性对话框,确保所有模块“生成”全部选中。
- 点击“本地 Windows 调试器”,编译并运行 Python 3.10.0 源码。
- 编译完成,报错如下:
- 解决方法:打开 NuGet 包管理器,搜索 libffi,将解决方案所有模块选中,点击“安装”。
- 安装完成,清理解决方案,再次点击“本地 Windows 调试器”,依旧报上述错误,因此调整编译顺序,重新编译如下。
方案二:编译成功
- 重新解压下载好的 Python-3.10.0.tgz 源码压缩包,用 Visual Studio 2019 打开 Python 3.10.0 源码,打开路径为:H:\\VisualStudioWorkspace\\Python-3.10.0\\PCbuild\\pcbuild.sln。
- 在解决方案上右键属性,弹出解决方案属性对话框,确保所有模块的“生成”都已勾选。
- 打开解决方案 NuGet 管理器,搜索 libffi,确保解决方案所有模块都选中,安装该 Library。
- 关闭 Visual Studio 2019,运行 H:\\VisualStudioWorkspace\\Python-3.10.0\\PCbuild\\build.bat,该批处理文件会从网络自行下载所需安装包并编译,要确保网络通畅,编译运行过程无报错,运行完毕,命令行窗口消失。
- 再次打开 Visual Studio 2019,选择 H:\\VisualStudioWorkspace\\Python-3.10.0\\PCbuild\\pcbuild.sln,点击“本地 Windows 调试器”,编译并启动 Python 3.10.0 源码,出现交互式窗口,表明 Python 3.10.0 源码编译成功。
- 修改源码:打开 pythoncore 模块中的 Objects/longobject.c 文件,找到 1762 行左右的 long_to_decimal_string() 函数,整数输出时会调用该方法,在函数中添加如下代码:
static PyObject *
long_to_decimal_string(PyObject *aa)
{
PyObject *v;
if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
return NULL;
printf("Python3.10.0源码修改 \\n"); // Added
return v;
}
- 修改完毕,清理解决方案,点击“本地 Windows 调试器”,再次运行 Python 3.10.0 源码,出现交互式窗口,当输出整数时,同时输出自己添加的代码,表明源码修改成功。
- 至此,Windows Visual Studio 2019 编译 Python 3.7.12 及 Python 3.10.0 源码全部成功。
以上是关于Windows Visual Studio 2019 编译 Python 3.7.12 及 Python 3.10.0 源码的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 远程调试 - MSVCP140.dll 丢失
Visual Studio2015 Nuget安装OpencvSharp包