所以经过一番研究,我自己找到了解决方案。
第一步:将python文件编译成exe
首先,您需要使用pyinstaller 将python 文件转换为单个exe。命令是
pyinstaller --onefile engine.py
您会在dist 文件夹中找到engine.exe。将exe 复制到您拥有renderer.js 的主目录中。删除所有其他与 python 相关的文件夹。
第 2 步:修改 renderer.js 文件
最初,我有一个带有以下代码的renderer.js 文件。 注意: 以下代码用于运行我的 python 脚本,使用 sys.argv 作为输入并使用 stdout 获取输出。
function sendToPython() {
var python = require("child_process").spawn("python", [
"./py/engine.py",
input.value,
]);
python.stdout.on("data", function (data) {
// Do some process here
});
python.stderr.on("data", (data) => {
console.error(`stderr: ${data}`);
console.log(`stderr: ${data}`);
});
python.on("close", (code) => {
console.log(`child process exited with code ${code}`);
});
}
但是现在我们已经生成了exe 文件,我们需要进行一些修改才能使其正常工作。我们只需要换行即可。
var python = require("child_process").spawn("python", ["./py/engine.py", input.value]);
以下是该行的修改版本。
var python = require("child_process").execFile("engine.exe", [input.value]);
简而言之,它的作用是使用命令行参数执行我们的engine.exe,而不产生python shell。
第三步:使用electron-packager打包我们的应用
在您的项目文件夹中打开一个终端并运行以下命令(一个接一个)以使用npm 全局安装electron-packager。
npm install --save-dev electron
npm install electron-packager -g
安装完成后,我们可以使用以下命令打包我们的应用程序。
electron-packager . pythonElectronApp --arch=x64 --asar
注意:pythonElectronApp是项目名称(你可以根据自己的意愿命名),--arch=x64表示64位架构。 p>
--asar 以一种阻止大多数人查看您的源代码的方式打包您的项目。无论如何,几乎所有人都可以通过检查 Electron 转储的asar 文件来查看源代码。您可以尝试代码混淆等方法来减缓攻击者进行逆向工程的速度。
关于代码混淆的有用资源 - How to perform obfuscation of source code and protect source in electron js
github 中报告了类似问题 - https://github.com/electron/electron-packager/issues/152
第 4 步:将我们的 engine.exe 放在正确的目录中
复制我们之前创建的engine.exe 并将其粘贴到创建电子应用程序的文件夹中。就我而言,pythonElectronApp-win32-x64
现在您可以打开功能齐全的python+electron 应用程序。在我的例子中,名字是pythonElectronApp.exe
第五步:创建一个主安装文件.msi
正如您在上一张图片中看到的,有很多依赖项和文件夹。要为 Windows 创建像 .msi 这样的独立安装程序,您可以使用像 Inno Setup 这样的软件来为您完成。