gpt4 book ai didi

python - 使用 angular-electron 打包可执行二进制文件

转载 作者:行者123 更新时间:2023-12-03 12:42:47 29 4
gpt4 key购买 nike

我正在尝试在 Linux 上使用 angular-electron 打包一个 python 二进制可执行文件。我从堆栈溢出中遵循了这个答案。
bundling precompiled binary into electron app .

在 main.ts 中,我编写了这个额外的代码片段。我已将可执行二进制文件放在 node_modules/datapod/datapod 中,并将此路径符号链接(symbolic link)到 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 运行 Electron :linux

应用程序使用二进制文件成功编译(因为使用二进制文件编译的应用程序的大小正好等于裸 Angular 应用程序 + 二进制文件的大小)。当我尝试运行这个编译的应用程序时,它失败并出现以下错误。

enter image description here
更新:
我尝试了另一种方法,但仍然没有结果。我创建了一个新文件夹 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 文件但无法运行。

最佳答案

将此代码段添加到您的 electron-builder.json 中。

  "extraResources": [
{
"from": "src/bin",
"to": "bin",
"filter": "**/*"
}
],

此时在生产中,文件将被复制到应用程序根 bin 文件夹中。下面是我创建的一个函数,用于在开发和生产模式下执行文件。
  const root = process.cwd();

getBinaryPath(binaryName: string) {
const binariesPath = this.isProduction() ? path.join(root, 'resources', 'bin') : path.join(root, 'src', 'bin');
return path.resolve(path.join(binariesPath, binaryName));
}

关于python - 使用 angular-electron 打包可执行二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58025246/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com