打包由 Python Flask Electron 提供支持的电子应用程序

bak*_*uuu 5 electron

我刚刚创建了一个由 Flask 提供支持的电子应用程序。

当我在 powershell 中运行该应用程序时,它运行得很好,但是当我使用 electro-packager 构建该应用程序时,它成功了,但该应用程序无法运行。

看来 python 代码不会包含在应用程序中。如何构建应用程序并集成我在应用程序中使用的所有 python 代码和模块?

我正在使用任何 python 模块,例如 pandas

小智 0

使用 PyInstaller 构建 Flask 应用程序.. 您可以通过 google 找到有关它的各种教程.. 选择适合您需求的一个。阅读官方文档总是好的https://www.pyinstaller.org/。好吧,我不知道你创建电子入口点的方法。我所做的是,在入口点(对我来说通常是 main.js)我创建了一个在应用程序准备就绪时调用的函数。我从Electron 框架上的 Pythonhttps://github.com/fyears/electron-python-example获得的一些东西

main.js

'use strict';

const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const path = require('path');

// This method will be called when Electron has finished
// initialization and is ready to create browser mainWindow.
// Some APIs can only be used after this event occurs.

var mainWindow = null;

function createWindow(){
  // spawn server and call the child process
  var rq = require('request-promise');
  mainAddr = 'http://localhost:4040/'

  // tricks 1 worked for me on dev.. but building installer of electron 
  // server never started.. didn't find time to fixed that       
  // var child = require('child_process').spawn('python', 
  //                                               ['.path/to/hello.py']);
  // or bundled py
  // var child = require('child_process').spawn('.path/to/hello.exe');

  // tricks 2, a little variation then spawn :)
  var executablePath = './relative/path/to/your/bundled_py.exe';
  var child = require('child_process').execFile;

  child(executablePath, function(err, data) {
    if(err){
      console.error(err);
      return;
    }
    console.log(data.toString());
  });

  // Create the browser mainWindow
  mainWindow = new BrowserWindow({
    minWidth: 600,
    minHeight: 550,
    show: false
  });

  // Load the index page of the flask in local server
  mainWindow.loadURL(mainAddr);

  // ready the window with load url and show
  mainWindow.once('ready-to-show', () => {
    mainWindow.show();
  });

  // Quit app when close
  mainWindow.on('closed', function(){
    mainWindow = null;
    // kill the server on exit
    child.kill('SIGINT');
  });
  // (some more stuff, eg. dev tools) skipped... 
};

var startUp = function(){
  rq(mainAddr)
    .then(function(htmlString){
      console.log('server started!');
      createWindow();
    })
    .catch(function(err){
      //console.log('waiting for the server start...');
      startUp();
    });
};

app.on('ready', startUp)

app.on('quit', function() {
    // kill the python on exit
    child.kill('SIGINT');
});

app.on('window-all-closed', () => {
    // quit app if windows are closed
    if (process.platform !== 'darwin'){
        app.quit();
    }
});
Run Code Online (Sandbox Code Playgroud)