gpt4 book ai didi

python - app.asar(electron/nodejs)内没有这样的文件或目录

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

我正在构建一个运行在nodejs之上的 Electron 应用程序。 gui在html/js上运行,我还有一些在后台运行的python脚本,向用户显示数据。

当我使用npm start在本地运行时,它运行良好,但是当我选择将应用程序与electron-packager库一起打包时,python无法运行,并且无法在app.asar中找到

我相信该解决方案围绕使用const originalFs = require('original-fs');originalFs.readFileSync(FILE);展开,但是我在很多部署方面都是陌生的,我不知道我是朝错误的方向前进,还是根本不可能做到这一点。我的代码如下:

    const subprocess = spawn('python', ['-u', __dirname + "/python/myscript.py", arg])
subprocess.stdout.on('data', (data) => {
console.log(`data:${data}`);
});
subprocess.stderr.on('data', (data) => {
console.log(`error:${data}`);
});
subprocess.stderr.on('close', () => {
console.log("Closed");
app.quit()
});


我还尝试设置 --asar=false并进入/resources/app/文件夹以获取 myscript.py文件。这提供了应用程序的全部功能,但是,如果可能的话,我仍然希望能够将其全部打包到 asar.app中。

最佳答案

应该有2条路径,一条用于开发构建,另一条用于生产。在此示例中,路径可能不完全是您想要的路径,但应将您带入正确的轨道。在生产模式下,getAppPath()函数将为您提供app.asar文件的路径。

const getPythonPath = fileName => {
const path = require('path')
const isDevBuild = process.env.NODE_ENV === 'development'

if (isDevBuild) {
return path.resolve(__dirname, `./python/${fileName}`)
} else {
const { app, remote } = require('electron')
// check main or renderer process for app path
const appPath = app ? app.getAppPath() : remote.app.getAppPath()
return path.resolve(appPath, `./python/${fileName}`)
}
}

const subprocess = spawn('python', ['-u', getPythonPath('myscript.py'), arg])

关于python - app.asar(electron/nodejs)内没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59566904/

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