我已经用电子制作了自己的应用程序,并且在启动外部python脚本时遇到了生产版本方面的问题。
当我在开发环境中运行代码时,我会遇到类似的事情:
const out = spawnSync(PYTHON_LOCATION, ['-d', '-j', '-p', path, tempfile]);
,因为PYTHON_LOCATION
是public/python.py
,所以效果很好。
但是,当我使用electron-builder制作AppImage时,这是行不通的,因为显然找不到该脚本。一个AppImage应用程序是一个文件,很明显公共目录不会随它一起导出。
这个问题有解决方案吗?
谢谢!
答案 0 :(得分:0)
在执行AppImage时,在流程环境上设置了AppDir
变量,因此您必须检查该变量是否存在并已设置。然后,您可以建立正确的python脚本路径。
答案 1 :(得分:0)
Electron将大多数东西捆绑到一个app.asar
文件中,该文件可能包含您想要的文件。问题是,Web上有一个或两个很好的建议,需要将AppImage文件相对于容器本身进行查询,相对于它们本身,这有点令人误解。现实情况是,我确信您已经发现,这些变化都不会起作用:
./PYTHON_LOCATION
/PYTHON_LOCATION
PYTHON_LOCATION
解决方案是您需要使用__dirname
来找出图像在哪里。当您运行AppImage时,它最有可能在此文件夹下(但是,从IDE运行时,不是):
/tmp/.mount_YourApplicationNameHVTcDI/
因此__dirname
是(假设应用程序是从app/electron/
文件夹构建的:
/tmp/.mount_YourApplicationNameHVTcDI/resources/app.asar/app/electron
所以您的解决方案将是这样的:
Path.join(__dirname, PYTHON_LOCATION)
尽管Electron正在查看app.asar
文件中的资源,但它对文件系统是透明的,并且看起来像一个文件夹。因此,您可以使用普通的文件I / O命令在其中查看。
请记住,在IDE中,__dirname
将完全不同,因此文件也必须存在。