代码之家  ›  专栏  ›  技术社区  ›  ishandutta2007

electron builder没有绑定python文件

  •  2
  • ishandutta2007  · 技术社区  · 8 年前

    renderer.js 包括 index.html . visitor.py 和 download.py 来自 通过 python-shell . 一旦绑定,它就无法找到python脚本

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

    我试着把所有的东西都放进去 files: [...] package.json 在下面 build > files 然后跑了 npm run dist . dist 文件夹显式地,然后运行 npm运行距离 . 都没用。

    /应用/test.app/Contents/Resources/app.asar公司/雷德勒出版社:226 错误:python:无法打开文件'访问者.py':[错误2]没有此类文件或

    {
      "name": "test",
      "version": "1.0.0",
      "description": "",
      "main": "main.js",
      "scripts": {
        "start": "electron .",
        "pack": "build --dir",
        "dist": "build"
      },
      "author": "",
      "license": "ISC",
      "build": {
        "appId": "com.example.app",
        "files": [
          "dist/",
          "node_modules/",
          "index.html",
          "main.js",
          "package.json",
          "renderer.js",
          "styles.css",
          "visitor.py",
          "download.py"
        ],
        "dmg": {
          "contents": [
            {
              "x": 110,
              "y": 150
            },
            {
              "x": 240,
              "y": 150,
              "type": "link",
              "path": "/Applications"
            }
          ]
        },
        "linux": {
          "target": [
            "AppImage",
            "deb"
          ]
        },
        "win": {
          "target": "squirrel",
          "icon": "build/icon.ico"
        }
      },
      "dependencies": {
        "csv-parse": "^2.5.0",
        "electron-css": "^0.6.0",
        "npm": "^6.1.0",
        "python-shell": "^0.5.0",
      },
      "devDependencies": {
        "electron": "^2.0.3",
        "electron-builder": "^20.19.1"
      }
    }
    

    附言: 这就是我说的电子制造者 https://github.com/electron-userland/electron-builder

    1 回复  |  直到 8 年前
        1
  •  3
  •   crifan    6 年前

    请不要弄错了

    /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公司 但另一个地方是 渲染器.js ,所以请确保不是你的错别字。如果是,请更正。


    事实上 electron-builder 是 绑定了您的python文件,但是由于 asar python-shell 找不到您的python文件,因此导致错误。

    如何修复

    禁用asar

    disable asar

    package.json 收件人:

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

    renderer.js 蟒蛇壳

    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
                    ...
    

    unpack :

    改变你

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

    包装好的 .应用程序 文件结构为:

    |_ 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
    

    你的 , 也许不需要改变 ,应该可以工作。

    asarUnpack 请参考官方文件: Overridable per Platform Options


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

        2
  •  1
  •   DevOpsGuY    8 年前

    您需要按如下方式指定它们:

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

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

    有关更多信息,请参阅 here