【问题标题】:Run python script in Electron app在 Electron 应用程序中运行 python 脚本
【发布时间】:2017-05-03 04:05:11
【问题描述】:

我有一个 Electron 项目,它使用 NodeJS 的 child_process 模块执行一些 python 脚本。 我的 python 脚本位于项目的根文件夹中。

以下是我如何调用 python 脚本:

let py = spawn('python',['ResolvePosition.py', obsFilePath, navFilePath])
py.stdout.on('data', data => console.log('data : ', data.toString()))
py.on('close', ()=>{
  // Python ends, do stuff
})

如果我使用npm start 运行我的电子应用程序,这很好用 当我使用 npm 模块 electron-builder 为 Windows 构建可执行文件并从 dist/win-unpacked/my-app.exe 运行可执行文件时,这不起作用,似乎我的脚本无法使用 python ./my-script-py 访问。

那么,我怎样才能使这个代码适用于构建的项目?

【问题讨论】:

    标签: python node.js electron electron-builder


    【解决方案1】:

    我已经解决了我的问题。我会为未来可能遇到同样问题的读者解释一下。

    使用电子生成器,有一些选项可以不将应用程序源代码打包到电子文件中。 这些选项是:

    asar

    是否将应用程序的源代码打包成存档, 使用 Electron 的归档格式。默认为真。节点模块,即 必须解压,会自动检测,不需要 明确设置 asarUnpack - 如果这不起作用,请提交问题。

    或者您可以传递 asar 选项的对象。

    asarUnpack

    相对于应用程序目录的全局模式,它指定哪个 创建 asar 存档时要解压缩的文件。

    DOCS

    asar 设置为false 可以解决问题,但electron-builder 不建议这样做。

    所以包括我需要解压到一个文件夹中的所有文件,并使用 "asarUnpack" : "my-folder/*" 是正确的方法。现在所有解压的文件都可以在/resources/app.asar.unpacked/my-folder中找到了

    另外需要考虑的是,使用路径'./ResolvePosition.py' 会查看我的电子项目的根文件夹,而不是我的NodeJS 文件所在的路径,我需要使用:

    let python = spawn('python', [path.join(__dirname, '../app.asar.unpacked/my-folder', 'ResolvePosition.py'), obsFilePath, navFilePath])
    

    【讨论】:

    • 您假设运行应用程序的客户端安装了 python?或者你是用电子应用程序打包 python 吗?
    • 是的,这里我假设客户端安装了 Python。 (因为客户只是我)我不确定如何轻松解决这个问题。 @paulovitorjp
    • 安装后你是如何在/resources/app.asar.unpacked/my-folder 设置python环境的。如果 python 和所有必需的模块都没有出现在适当的版本中,则 python 不会运行。
    【解决方案2】:

    您可以将脚本包含在extraResources

    "build": {
        "extraResources": "python_scripts",
    ...
    

    然后目录将位于应用根目录:

    let python = spawn('python', [path.join(app.getAppPath(), '..', 'python_scripts/my_script.py'])
    

    【讨论】:

    • 在这种情况下,app 变量是什么?或者它来自哪里?我假设路径来自内置路径模块的nodejs,但什么是应用程序
    • app 来自需要 electron 包。 const { app } = require("electron");And here's the docs on app.getAppPath.
    猜你喜欢
    • 2018-02-13
    • 2012-02-21
    • 1970-01-01
    • 2022-10-18
    • 2021-09-19
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多