包装电子应用程序由Python Flask电子驱动

时间:2018-02-07 17:12:08

标签: electron

我刚创建了一个由Flask驱动的电子应用程序。

当我在powershell中运行应用程序时效果很好但是当我使用electron-packager构建此应用程序时,它成功但应用程序无效。

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

我正在使用像pandas

这样的任何python模块

2 个答案:

答案 0 :(得分:0)

使用PyInstaller构建烧瓶应用程序..您可以通过谷歌找到它的各种教程..选择一个适合您的需求。总是很高兴阅读官方文档https://www.pyinstaller.org/。 好吧,我不知道你创建电子入口点的方法。我做的是,在入口点(通常是main.js对我来说)我已经创建了一个在app上调用的函数已准备就绪。我从Python on Electron frameworkhttps://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();
    }
});

答案 1 :(得分:0)

我能够使用here中的指南来打包电子烧瓶应用程序,该指南提供了以上给出的答案的详细信息。

首先,请确保pyinstaller .exe在运行服务器时确实正确启动了服务器,并且在您直接定向到浏览器中的托管页面时,该应用程序已完成您需要做的所有事情。包装瓶应用程序教程为here

然后确定何时执行:

pkg-config --cflags --libs json-glib-1.0

请确保其:

var subpy = require('child_process').spawn('./dist/hello/hello');