V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
axina
V2EX  ›  Electron

请教一下, electron 打包的安装包,包含的 bin 文件无法执行问题

  •  
  •   axina · 3 天前 · 749 次点击

    请教一下各位大佬一个 electron 问题: 在 mac 上打包 electron(使用 electron-vite + react + python),其中将后端 python api 服务打包为 main.dist 文件(里面包含 main.bin )

    开发环境: 一切都正常,main.bin 文件正常启动;

    打包并安装到 mac 后:

    • 没有反应
    • 但是用终端在 app 路径下的 resources 里面执行该 bin 文件又可以正常启动。

    不知道是什么问题,问 AI 改了好多遍还是这样,请教下大家帮忙看下,谢谢了。

    下面是 main 下的该部分代码:

      let pythonBinPath: string;
      if (app.isPackaged) {
        // 打包后的路径
        pythonBinPath = join(process.resourcesPath,'main.dist', 'main.bin');
      } else {
        // 开发模式下的路径
        pythonBinPath = join(app.getAppPath(), 'resources/main.dist', 'main.bin');
      }
    
      console.log('Python binary path:', pythonBinPath);
    
      // 尝试设置 Python 可执行文件的权限
      try {
        chmodSync(pythonBinPath, '755');
      } catch (error) {
        console.error(`设置 Python 可执行文件权限失败: ${error}`);
        dialog.showErrorBox('权限错误', `设置 Python 可执行文件权限失败: ${error}`);
        return;
      }
    
      // 启动 Python 进程
      pythonProcess = spawn(pythonBinPath);
    
    12 条回复    2024-07-01 21:28:25 +08:00
    jeesk
        1
    jeesk  
       3 天前
    报错什么呢? 报错有搞出来呀。
    yeeli
        2
    yeeli  
       3 天前
    在打包的时候需要将 main.dist 拷贝 resources 目录下, 你可以右键查看打包好的 app 文件下的 resources 目录里是否有这个文件
    axina
        3
    axina  
    OP
       3 天前
    @jeesk 请问安装完怎么看报错啊,不知道咋像开发环境来看
    axina
        4
    axina  
    OP
       3 天前
    @yeeli
    嗯嗯有的,这是 build 的配置:
    extraResources:
    - from: resources/main.dist
    to: ./main.dist
    filter:
    - "**/*"
    安装完这个文件在终端可以用./main.bin 的方式运行,但打开 app 就没反应;开发环境打开 app 时 bin 就运行没问题...
    yeeli
        5
    yeeli  
       3 天前
    @axina 代码感觉没有问题, 可以检查一下设置下的<<安全性与隐私>>里面有没有要许可的内容
    yeeli
        6
    yeeli  
       3 天前
    @axina 日志可以用 electron-log 这个包
    musi
        7
    musi  
       2 天前 via iPhone
    在终端里进入到应用的 macOS 文件夹,然后执行你应用的可执行文件,可以看到 log
    axina
        8
    axina  
    OP
       2 天前
    @yeeli #6 非常感谢,用 electron-log 可以看到日志了,bin 文件被 electron 执行了,但是一请求接口进程就结束了...
    axina
        9
    axina  
    OP
       2 天前
    @musi 嗯嗯,bin 在终端里可以执行,但 electron 的 spawn 执行完,一请求接口这个进程没了,不知道咋回事
    yeeli
        10
    yeeli  
       2 天前
    @axina 运行 app 的时候,打开设置下的隐私与安全里是否有 bin 文件的请求运行许可
    axina
        11
    axina  
    OP
       2 天前
    @yeeli #10 看了下,没有的,我在 main 里面也对 main.dist 下的所有文件都这样处理了:chmodSync(filePath, '755') 现在还是一样一调用接口 bin 的进程就结束了,我在试着把 python 打个日志看一下,不然就实在没辙了...
    axina
        12
    axina  
    OP
       2 天前
    @yeeli #5 非常感谢大佬,确实是权限的问题,把 Electron 和 Python 打包软件(nuitka)里的权限改成这几个就没问题了:
    - NSDesktopFolderUsageDescription: An application requests access to the user's Desktop folder.
    - NSDocumentsFolderUsageDescription: An application requests access to the user's Documents folder.
    - NSDownloadsFolderUsageDescription: An application requests access to the user's Downloads folder.
    - NSNetworkVolumesUsageDescription: An application requests access to files on a network volume.
    - NSRemovableVolumesUsageDescription: An application requests access to files on a removable volume.

    参考: https://github.com/Nuitka/Nuitka/issues/1605
    第一个 Electron 软件属实是跑通了,非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1133 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:50 · PVG 02:50 · LAX 11:50 · JFK 14:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.