这是我的目录结构,其中renderer.js
包含index.html
。
python脚本visitor.py
和download.py
通过python-shell从renderer.js
调用。
捆绑后,将无法找到python脚本
|_ index.html
|_ styles.css
|_ main.js
|_ package.json
|_ dist/
|_ node_modules/
|_ renderer.js
|_ visitor.py
|_ download.py
我尝试将所有内容放在files: [...]
下package.json
的{{1}}中,然后运行build > files
。
我还尝试将python文件显式复制到npm run dist
文件夹,然后运行dist
。
没有一个工作。
/Application/test.app/Contents/Resources/app.asar/remderer.js:226 错误:python:无法打开文件'visitor.py':[错误2]没有此类文件或 目录
这是我的package.json
npm run dist
PS: 这是我在说的电子助力器 https://github.com/electron-userland/electron-builder
答案 0 :(得分:3)
/Application/test.app/Contents/Resources/app.asar/remderer.js:226 Error: python: can't open file 'visitor.py': [Error 2] No such file or directory
是 remderer.js ,而其他地方是 renderer.js ,因此请确保不要打错。如果是,请更正。
实际上electron-builder
是 IS 捆绑了您的python文件,但是由于asar
,您的python-shell
无法找到您的python文件,因此会导致错误。< / p>
最简单但不推荐的方法:禁用asar
disable asar
将您package.json
更改为:
{
...
"build": {
"appId": "com.example.app",
...
"asar": false,
然后在您的renderer.js
中,其中包含python-shell
代码,也许像这样:
import {PythonShell} from 'python-shell';
PythonShell.run('visitor.py', null, function (err) {
if (err) throw err;
console.log('finished');
});
现在应该工作。
禁用asar后,所有相关文件路径均不包含asar,请执行以下操作:
/Application/test.app/Contents/Resources/app/visitor.py
/Application/test.app/Contents/Resources/app/renderer.js
即.app
的文件结构为:
|_ test.app
|_ Contents
|_ Resources
|_ app
|_ styles.css
|_ main.js
|_ package.json
|_ dist/
|_ node_modules/
|_ renderer.js
|_ visitor.py
|_ download.py
...
保持启用asar,将多余的文件放入unpack
:
将您package.json
更改为:
{
...
"build": {
"appId": "com.example.app",
...
"asar": true,
"asarUnpack": [
"visitor.py",
"download.py"
"renderer.js"
],
打包的.app
文件结构为:
|_ test.app
|_ Contents
|_ Resources
|_ app.asar # a single compressed binary file
|_ app.asar.unpacked # a folder/directory, contain unpacked origin files
|_ visitor.py
|_ download.py
|_ renderer.js
您的renderer.js
,可能不需要更改,并且可以正常工作。
有关asarUnpack
的更多详细信息,请参考官方文档:Overridable per Platform Options
PS:其他一些asar和相关的尝试,可以参考我的中文帖子:【已解决】mac中PyInstaller打包后的二进制文件在electron-builder打包后app中有些无法通过child_process的execFile运行
答案 1 :(得分:0)
您需要指定它们,如下所示:
"extraFiles": [
"from":"source path",
"to":"your destination"
]
如果要通过创建目录放置这些文件,请使用extraResources
"extraResources": [
"from":"source path",
"to":"some directory name"
]
有关更多信息,请参阅 here