电子生成器未捆绑python文件

时间:2018-07-05 01:10:26

标签: python node.js python-3.x electron electron-builder

这是我的目录结构,其中renderer.js包含index.html。 python脚本visitor.pydownload.py通过python-shellrenderer.js调用。 捆绑后,将无法找到python脚本

  |_ index.html
  |_ styles.css
  |_ main.js
  |_ package.json
  |_ dist/
  |_ node_modules/
  |_ renderer.js
  |_ visitor.py
  |_ download.py

我尝试将所有内容放在files: [...]package.json的{​​{1}}中,然后运行build > files。 我还尝试将python文件显式复制到npm run dist文件夹,然后运行dist。 没有一个工作。

  

/Application/test.app/Contents/Resources/app.asar/remderer.js:226   错误:python:无法打开文件'visitor.py':[错误2]没有此类文件或   目录

这是我的package.json

npm run dist

PS: 这是我在说的电子助力器 https://github.com/electron-userland/electron-builder

2 个答案:

答案 0 :(得分:3)

请确保不要输入错误

/Application/test.app/Contents/Resources/app.asar/remderer.js:226 Error: python: can't open file 'visitor.py': [Error 2] No such file or directory remderer.js ,而其他地方是 renderer.js ,因此请确保不要打错。如果是,请更正。


原因

实际上electron-builder IS 捆绑了您的python文件,但是由于asar,您的python-shell无法找到您的python文件,因此会导致错误。< / p>

如何修复

解决方案1:

最简单但不推荐的方法:禁用asar

如何disable asar

将您package.json更改为:

{
...
  "build": {
    "appId": "com.example.app",
...
    "asar": false,

然后在您的renderer.js中,其中包含python-shell代码,也许像这样:

import {PythonShell} from 'python-shell';

PythonShell.run('visitor.py', null, function (err) {
  if (err) throw err;
  console.log('finished');
});

现在应该工作。

内部逻辑

禁用asar后,所有相关文件路径均不包含asar,请执行以下操作:

  • /Application/test.app/Contents/Resources/app/visitor.py
  • /Application/test.app/Contents/Resources/app/renderer.js

.app的文件结构为:

|_ test.app
    |_ Contents
        |_ Resources
            |_ app
                |_ styles.css
                |_ main.js
                |_ package.json
                |_ dist/
                |_ node_modules/
                |_ renderer.js
                |_ visitor.py
                |_ download.py
                ...

解决方案2:

保持启用asar,将多余的文件放入unpack

如何打开包装

将您package.json更改为:

{
...
  "build": {
    "appId": "com.example.app",
...
    "asar": true,
    "asarUnpack": [
      "visitor.py",
      "download.py"
      "renderer.js"
    ],

打包的.app文件结构为:

|_ test.app
    |_ Contents
        |_ Resources
            |_ app.asar             # a single compressed binary file
            |_ app.asar.unpacked    # a folder/directory, contain unpacked origin files
                |_ visitor.py
                |_ download.py
                |_ renderer.js

您的renderer.js可能不需要更改,并且可以正常工作。

有关asarUnpack的更多详细信息,请参考官方文档:Overridable per Platform Options


PS:其他一些asar和相关的尝试,可以参考我的中文帖子:【已解决】mac中PyInstaller打包后的二进制文件在electron-builder打包后app中有些无法通过child_process的execFile运行

答案 1 :(得分:0)

您需要指定它们,如下所示:

    "extraFiles": [
        "from":"source path",
        "to":"your destination"
    ]

如果要通过创建目录放置这些文件,请使用extraResources

    "extraResources": [
        "from":"source path",
        "to":"some directory name"
    ]

有关更多信息,请参阅 here