我已经准备好了我的应用程序,它可以完美地运行npm start(相当于electron .),但是当我用electron builder打包应用程序时,我不再可以访问python。脚本不会运行,并且它给出错误“Error:spawn python ENOENT”。应用程序的其余部分工作正常,但是我没有访问python的功能。我已经在这上面花了几个小时都没有用。下面是在main.js中调用python的地方,pythonPath是python所在的位置,我已经仔细检查过了。最初我根本没有env参数,但这是另一个论坛上建议的解决方案,它不起作用。
const pythonPath = '/Users/myname/miniconda3/bin/python';
log.info("process.env.PYTHON_PATH", process.env.PYTHON_PATH)
const env = Object.create(process.env);
env.PATH = `${pythonPath}:${env.PATH}`;
const { spawn } = require('child_process');
const pythonProcess = spawn('python', [path.join(process.resourcesPath, '../flask-server/server.py')], {
env: env
});
字符串
首先,我认为文件路径是错误的,所以添加了一些测试,发现路径是正确的,它存在(路径到.py文件是)。接下来,我想可能是有什么问题的python评估,所以我切换到一个exec,我正在调用“python -c path/to/my/file.py“直接。与此同时,我得到了错误“错误执行Python脚本:. python:command not found”.这让我相信,无论出于何种原因,node.js能够在我运行开发版本时访问我的计算机的python,但在构建后发生了一些变化,它无法再访问python。我已经检查了文件权限,这也没有改变任何东西。提前感谢您的帮助。
package.json:
{
"name": "app-name",
"version": "1.0.0",
"description": "app description",
"main": "main.js",
"author": "Rocky",
"license": "MIT",
"devDependencies": {
"electron": "^27.1.3",
"electron-builder": "^24.9.1"
},
"scripts": {
"start": "electron .",
"package": "electron-builder"
},
"build": {
"appId": "app-name",
"directories": {
"output": "dist"
},
"extraFiles": [
{
"from": "flask-server",
"to": "flask-server",
"filter": [
"**/*"
]
}
],
"win": {
"target": "nsis",
"icon": "windows_icon.ico"
},
"mac": {
"target": "dmg",
"icon": "mac_icon.icns"
},
"linux": {
"target": "AppImage"
}
},
"dependencies": {
"electron-log": "^5.0.1",
"fix-path": "^4.0.0"
}
}
型
1条答案
按热度按时间mv1qrgav1#
对于任何有类似问题的人,我无法解决这个错误,但我找到了一个解决方案,将python可执行文件作为extraFile包含在内。这个应用程序有一些繁重的python逻辑,所以我包含了整个miniconda文件夹,通过将以下内容添加到extraFiles部分来修改package.json
字符串
为了在打包/部署的应用程序中访问这些文件(使用electron-builder,来自
main.js
),我使用型
路径在生产和过程中会发生一些变化。resourcesPath将始终返回打包应用程序中resources文件夹的路径。希望这对您有帮助。