2

我已经用电子制作了自己的应用程序,但在启动外部 python 脚本时,我遇到了生产版本的问题。

当我在开发环境中运行代码时,我有类似的东西:

const out = spawnSync(PYTHON_LOCATION, ['-d', '-j', '-p', path, tempfile]);

它运作良好,因为PYTHON_LOCATIONis public/python.py

但是,当我使用 electron-builder 制作 AppImage 时,这不起作用,因为显然找不到脚本。AppImage 应用程序是一个单独的文件,很明显公共目录没有随它一起导出。

这个问题有解决方案吗?

谢谢!

4

2 回答 2

0

执行 AppImage 时,会AppDir在流程环境中设置变量,因此您必须检查该变量是否存在并已设置。然后你可以为你的 python 脚本构建正确的路径。

于 2019-07-25T22:39:50.333 回答
0

Electron 将大多数东西捆绑到一个app.asar文件中,该文件可能包含您想要的文件。问题是,网络上有一两个善意的建议,即需要对于容器本身查询 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会完全不同,因此文件也需要在那里。

于 2019-10-24T19:51:41.647 回答