【问题标题】:How to compile Python + Electron JS into desktop app (exe)如何将 Python + Electron JS 编译成桌面应用程序(exe)
【发布时间】:2021-07-12 17:52:23
【问题描述】:

我使用python作为后端与Node JS集成的Electron JS作为前端创建了一个桌面应用程序。

下图是我项目的文件树。

我能够使用 renderer.js 文件将 python 与 Electron JS 链接起来,并且我的应用程序按预期运行。

但我的问题是,我应该如何将这个 Python + Electron JS 应用程序编译成 exe。我知道 pyinstaller 可用于将 python 文件编译为exe。请告诉我如何编译这个python + electron JS 应用程序。

提前致谢。

【问题讨论】:

  • 我找到了一些关于如何从 python 创建可执行文件的材料,可能会有所帮助stackoverflow.com/questions/12059509/… 但它没有回答节点部分,抱歉。
  • 感谢有关 python 编译的线程。如果您发现有关我的问题的任何可能有用的资源,请告诉我。
  • 前端的 HTML+CSS+JavaScript + 后端的 Python 在 Tauri 路线图上。目前 PyQt 是一个更好的解决方案。

标签: python compilation electron exe


【解决方案1】:

所以经过一番研究,我自己找到了解决方案。

第一步:将python文件编译成exe

首先,您需要使用pyinstallerpython 文件转换为单个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 这样的软件来为您完成。

【讨论】:

  • 这是一个非常有限的解决方案,因为您只能生成一个没有通信的 exe 文件,我知道这将如何与大型项目一起使用。
  • 如果您有更好的实施方法,请提出其他解决方案。
【解决方案2】:

取决于你真正想要什么。如果你只想要一个 Python 的 Web 前端,那么你可以一起跳过 Electron 并使用CEF PythonHere's another thread about compiling python exes with CEF PythonAnd here's the PyInstaller example from the CEF Python repo.

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多