Electron-Builder相对文件路径

qnzebej0  于 8个月前  发布在  Electron
关注(0)|答案(1)|浏览(134)

我正在使用ElectronJs编写我的第一个应用程序,作为一个用Python编写的旧项目的GUI。当我从cmd运行我的Electron应用程序时,我可以使用提供的脚本成功激活python venv,运行用python编写的代码,并在脚本将结果导出为out/文件夹中的文件后停用venv。所有这些操作都是使用child_process.spawn()方法处理的,并以我的命令作为参数启动一个powershell示例(我不知道是否有更好的方法,但这对我来说很有效!).
当我尝试用electron-builder打包我的Electron应用程序的可移植可执行文件时,我知道我用js编写的python管理器脚本可以运行,但我的python代码似乎无法运行,我认为我的相对路径不再起作用。
我使用以下路径作为我的python脚本:

const pythonScriptPath = path.join(__dirname, '../python/main.py');

项目结构:

root:
 + // other files 
 + src:
    |
    + js: //folder with all my js files
    |
    + html: // folder for html
    + css:  // fodlder for css
    |
    + py: // all my python stuff in here
       + venv: // folder for my python env
       + // all my python scripts

我需要一种方法来正确定位我的文件,以便我的应用程序在导出为可移植的可执行文件时能够正确运行

编辑

我可以使用pyInstaller将我的python代码转换为可执行文件,这样我就不必处理所有venv的东西,但我不认为这会使我的生活更轻松,因为我不能执行文件(或以文件路径为参数的程序)

m0rkklqb

m0rkklqb1#

这并不是说路径是相对的,而是说asar档案如何运作。child_process.spawn()只是调用系统API,您的系统无法从app.asar内部执行文件。Python也不知道如何从那里执行代码。
将其置于asar之外的一些解决方案:

  1. extraResources
    把这个放在你的电子构建器配置中(假设是json):
"extraResources": ["src/py"],

不要在files中再次打包它,没有理由。这样,您的src/py就被复制到electron-builder构建中的resources/src/py中。
你也可以把它放在一个不同的目录下,像这样:

"extraResources": [{
  "from": "src/py",
  "to": "py"
}],
  1. extraFiles
    这与extraResources的工作原理相同,不同的是它被放在电子二进制文件旁边,而不是resources子目录。
  2. asarUnpack
    你可以像往常一样将你的python代码打包到asar中,就像在files中指定的那样,并使用asarUnpack将一个解包的副本放在resources/app.asar.unpacked中,就像这样:
"asarUnpack": ["src/py"]

我不推荐这种方式,因为这样你的应用程序包含了两个python代码的副本:一个在asar内部(不被任何东西使用),另一个在app.asar.unpacked

相关问题