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源码下载

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包

visual studio2019的安装以及使用

在Visual Studio上开发Node.js程序

在 Visual Studio 2012 / 2013 中使用 SSIS BIDS

如何将 SQL 报告项目 (rptproj) 升级到 Visual Studio 2012?