如何使用 node-gyp 构建 python?

blu*_*yke 8 javascript python visual-studio node.js node-gyp

我见过的官方教程以及一个展示如何从源代码和编辑它与Visual Studio等构建Python,但我怎么淋巴结GYP构建它使用它作为节点的本地应用程序?

例如,在教程中,他们告诉您下载源代码,然后(在 Windows 中)输入该目录:

"PCbuild/build.bat"   
Run Code Online (Sandbox Code Playgroud)

然后构建 Visual Studio 解决方案和 python 等,但现在我如何使用 node-gyp 来做到这一点?通常,要包含要使用 node-gyp 构建的外部依赖项,您只需将它们包含在 binding.gyp 文件中。对于 python,我首先将 64 位(后来是 32 位,与下面相同的错误)python 安装到 C:/Python382,然后我将该文件夹复制到我的 C++ 应用程序中的另一个文件夹,并将 binding.gyp 文件设置为此(获取包含和库):

{
  "targets": [
    {
        "target_name": "addon",
        "sources": [ 
            "<!@(node -p \"var fs=require('fs'),path=require('path'),walk=function(r){let t,e=[],n=null;try{t=fs.readdirSync(r)}catch(r){n=r.toString()}if(n)return n;var a=0;return function n(){var i=t[a++];if(!i)return e;let u=path.resolve(r,i);i=r+'/'+i;let c=fs.statSync(u);if(c&&c.isDirectory()){let r=walk(i);return e=e.concat(r),n()}return e.push(i),n()}()};walk('./sources').join(' ');\")"
        ],
        "libraries":[
            "C:/Users/Coby/Documents/aa/atzmus/CPPtesting/other/ok/Python382/libs/python38.lib",
            "C:/Users/Coby/Documents/aa/atzmus/CPPtesting/other/ok/Python382/libs/python3.lib",
            "C:/Users/Coby/Documents/aa/atzmus/CPPtesting/other/ok/Python382/libs/_tkinter.lib"
        ],
        "include_dirs": [
            "C:/Users/Coby/Documents/aa/atzmus/CPPtesting/other/ok/Python382/include"
        ],
        "dll_files": [
            "C:/Users/Coby/Documents/aa/atzmus/CPPtesting/other/ok/Python382/python38.dll"
        ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

和我的 hello.cc 文件,这是另一个来源,只包含Python.h. 当我使用node-gyp buildor运行这个构建时node-gyp rebuild,它实际上构建得很好,根本没有错误,但是当我将文件 addon.node 复制到我的实际 nodeJS 服务器时,它只有一行var addon = require("./addon"),我在 CMD 中得到以下错误输出(但是,它可以正常工作,没有错误,而无需在我的 .cc 源文件中包含 Python.h):

internal/modules/cjs/loader.js:1197
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: \\?\C:\Users\Coby\Documents\aa\atzmus\testServer\addon.node is not a valid Win32 application.
\\?\C:\Users\Coby\Documents\aa\atzmus\testServer\addon.node
?[90m    at Object.Module._extensions..node (internal/modules/cjs/loader.js:1197
:18)?[39m
?[90m    at Module.load (internal/modules/cjs/loader.js:983:32)?[39m
?[90m    at Function.Module._load (internal/modules/cjs/loader.js:891:14)?[39m
?[90m    at Module.require (internal/modules/cjs/loader.js:1023:19)?[39m
?[90m    at require (internal/modules/cjs/helpers.js:72:18)?[39m
    at Object.<anonymous> (C:\Users\Coby\Documents\aa\atzmus\testServer\oy.js:2:
9)
?[90m    at Module._compile (internal/modules/cjs/loader.js:1128:30)?[39m
?[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:1
0)?[39m
?[90m    at Module.load (internal/modules/cjs/loader.js:983:32)?[39m
?[90m    at Function.Module._load (internal/modules/cjs/loader.js:891:14)?[39m
Run Code Online (Sandbox Code Playgroud)

主要部分似乎是:

addon.node is not a valid Win32 application.

我尝试在 64 位 Windows 上使用 python 执行此操作,对于 32 位 Windows,我的系统是 64 位,我的 nodeJS 安装是 64 位,但我也尝试使用 32 位注释;我不知道如何确切地解决这个问题,或者是否有另一种完全使用 node-gyp 构建 python 的方法?

所以:

在windows中需要采取哪些步骤通过node-gyp构建python,才能在本地使用python和nodejs而不必求助于子进程?