我正在尝试在Linux上使用angular-electron打包python二进制可执行文件。我已经从堆栈溢出中遵循了这个答案。 bundling precompiled binary into electron app。
在main.ts中,我已经编写了这个额外的代码段。我已将可执行二进制文件放在node_modules / datapod / datapod中,并将此路径符号链接到node_modules / .bin /文件夹中。
const spawn = require('child_process').spawn;
var appRootDir = require('app-root-dir').get();
var datapodpath=appRootDir+'/node_modules/datapod/datapod';
console.log(datapodpath)
const datapod = spawn(datapodpath, [], {}); //add whatever switches you need here
datapod.stdout.on( 'data', data => {
console.log( `stdout: ${data}` );
});
datapod.stderr.on( 'data', data => {
console.log( `stderr: ${data}` );
})
datapod.on( 'close', code => {
console.log( `child process exited with code ${code}` );
})
一切尽善尽美
npm开始
我还可以查看python应用程序的日志。当我这样做时,
npm运行electronic:linux
应用程序使用二进制文件成功编译(因为使用二进制文件编译的应用程序的大小完全等于裸角应用程序+二进制文件的大小)。当我尝试运行此已编译的应用程序时,它失败并显示以下错误。
更新: 我尝试了另一种方法,但仍然没有结果。我创建了一个新的文件夹externals / bin,并在该文件夹中复制了可执行二进制文件“ datapod”。要将这个文件夹复制到打包的应用程序中,请将这些行添加到electron-builder.js
"files": [
"**/*",
"!**/*.ts",
"!*.code-workspace",
"!LICENSE.md",
"!package.json",
"!package-lock.json",
"!src/",
"!e2e/",
"!hooks/",
"!angular.json",
"!_config.yml",
"!karma.conf.js",
"!tsconfig.json",
"!tslint.json",
"externals/bin"
],
在main.ts文件中编辑了我的代码
const appPath = process.env.NODE_ENV === 'production' ? process.resourcesPath : __dirname;
const execPath =path.join(appPath, 'externals/bin/datapod');
console.log(execPath)
成功编译后,当我尝试运行此应用程序时,出现了相同的错误。我使用
在/tmp/.moun-angular***/resources/app.asar中解压缩了应用程序npx asar extract /tmp/.mount_angulaG6ARST/resources/app.asar extrractedApp
该文件夹的内容确实具有externals / bin / datapod文件,但无法运行。
答案 0 :(得分:0)
将此代码段添加到您的electronic-builder.json中。
import requests
r = requests.get('https://blockchain.info/block-height/100?format=json')
data = r.json()
#print(r.text)
#print(data)
print(data['blocks'][0]['hash'])
此时,文件将被复制到apps根bin文件夹。下面是我创建的用于在开发和生产模式下执行文件的函数。
ListView(
children: <Widget>[
ChewieListItem(
videoPlayerController: VideoPlayerController.asset(
'videos/video_one.mp4'
),
looping: false,
),
],
),