[英]How does one make electron-builder copy .pyc files, which are by default excluded?
[英]electron-builder is not bundling the python files
這是我的目錄結構,其中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: [...]
in package.json
下build > files
然后運行npm run dist
。 我還嘗試將 python 文件顯式復制到dist
文件夾,然后運行npm run dist
。 沒有人在工作。
/Application/test.app/Contents/Resources/app.asar/remderer.js:226 錯誤:python:無法打開文件“visitor.py”:[錯誤 2] 沒有那個文件或目錄
這是我的 package.json
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "electron .",
"pack": "build --dir",
"dist": "build"
},
"author": "",
"license": "ISC",
"build": {
"appId": "com.example.app",
"files": [
"dist/",
"node_modules/",
"index.html",
"main.js",
"package.json",
"renderer.js",
"styles.css",
"visitor.py",
"download.py"
],
"dmg": {
"contents": [
{
"x": 110,
"y": 150
},
{
"x": 240,
"y": 150,
"type": "link",
"path": "/Applications"
}
]
},
"linux": {
"target": [
"AppImage",
"deb"
]
},
"win": {
"target": "squirrel",
"icon": "build/icon.ico"
}
},
"dependencies": {
"csv-parse": "^2.5.0",
"electron-css": "^0.6.0",
"npm": "^6.1.0",
"python-shell": "^0.5.0",
},
"devDependencies": {
"electron": "^2.0.3",
"electron-builder": "^20.19.1"
}
}
PS:這是我說的電子生成器https://github.com/electron-userland/electron-builder
/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
捆綁你的Python文件,但由於asar
,你python-shell
無法找到你的Python文件,所以會導致錯誤。
最簡單但官方不推薦:禁用 asar
disable asar
將您的package.json
更改為:
{
...
"build": {
"appId": "com.example.app",
...
"asar": false,
然后在包含python-shell
代碼的renderer.js
,可能是這樣的:
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運行
您需要按如下方式指定它們:
"extraFiles": [
"from":"source path",
"to":"your destination"
]
如果您想通過創建目錄來放置這些文件,請使用 extraResources
"extraResources": [
"from":"source path",
"to":"some directory name"
]
有關更多信息,請參閱此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.