这是我构建和使用静态嵌入在另一个应用程序中的 python 所需要做的。
构建静态 python 库(例如,python36_d.lib、python36.lib)
将 python 解决方案 (pcbuild.sln) 中的所有项目转换为静态。这是大约 40 个项目,因此可能需要一段时间。这包括将要构建的库产品设置为“静态库”,并将所有 /MD 和 /MDd 构建选项设置为 /MT 和 /MTd。
至少对于 pythoncore 项目,将 Preprocess 定义更改为 Py_NO_ENABLE_SHARED。这告诉项目它将寻找来自静态库的调用。
不择手段,为自己找到一个 pyconfig.h 文件并将其放入 Python 构建的 Include 区域。目前尚不清楚该文件是如何从 Windows 工具构建的,但似乎可以从其他来源获取一个,并且工作正常。人们可能会从您正在构建的代码的预编译版本中获取 pyconfig.h。[顺便说一句,我构建的 Python 是 3.6.5,是用 Windows 2015 构建的,更新 3。]
希望这能让您同时构建 python36.lib 和 python36_d.lib。现在您需要对您的应用程序项目进行更改,以使其能够与 python 库链接。你需要这样做:
- 将 Python Include 目录添加到 General->Include Directories 列表中。
- 将 Python 库目录添加到 General->Library Directories 列表中。这将是 ..\PCBuild\win32 和 ..\PCBuild\amd64。
- 将定义 Py_NO_ENABLE_SHARED 添加到 C/C++ -> Preprocessor 区域。
- 对于 Linker->input 添加(对于发行版)python36.lib;shlwapi.lib;version.lib 和(对于调试)python36_d.lib;shlwapi.lib;version.lib。
应该就是这样。它应该运行并工作。但还有一件事。为了能够正常运行,可执行文件需要访问 python 构建的 Lib 目录。因此,需要将其副本移动到可执行文件(包含嵌入式 python)所在的任何位置。或者您可以将 Lib 区域添加到 windows 的执行路径中。这也应该有效。
这就是全部。