Прежде чем начать, я прошу прощения за то, что этот вопрос длинный.
Я создаю электронное приложение с помощью электронного конструктора, которому необходимо запускать скрипт Python, когда Приложение открывается, и файл Python продолжает работать, отслеживая изменения в каталоге/файле с помощью сторожевой библиотеки lib. Каталог, который он отслеживает, находится за пределами моего упакованного приложения, путь к этому каталогу уже установлен в файле json, но будет изменен пользователем внутри моего приложения, как только оно будет фактически запущено и запущено на необходимый пользователю путь.< /p>
Я попытался сделать Python переносимым, чтобы приложение могло запускать файл py после его распространения. Я использую ту же версию Python, которую использовал при разработке, и когда я тестирую запуск исполняемого файла Python для запуска файла Python в каталоге упакованного приложения, он работает, и файл py работает правильно. Но когда я запускаю исполняемый файл упакованного приложения, он выдает ошибку:
Скрипт Python завершился с кодом -4058
Я использовал spawn для запуска python с exe-файлом python, но при запуске приложения я получал ошибку ENOENT, ссылающуюся на путь/файл python.exe. Поэтому я попытался вместо этого использовать execfile для запуска файла Python с исполняемым файлом Python, но теперь я получаю упомянутую выше ошибку (сценарий Python завершен с кодом -4058), который, как я предполагаю, вызван той же проблемой?
Я считаю, что все пути верны, и, как я уже сказал, файл Python работает правильно с исполняемым файлом Python (как расположен, так и запускается в каталоге упакованного приложения с помощью терминала). Но опять же, при запуске application.exe я попадаю в приложение, и я не могу получить доступ ни к одной из страниц, а в терминале получаю ранее упомянутую ошибку.
Это мой пакет. json, с которым я пытаюсь работать:
{
"name": "tta-react-app",
"version": "0.1.0",
"description": "TTA Application",
"private": true,
"main": "main.js",
"homepage": "./",
"proxy": "http://localhost:5000",
"dependencies": {
"antd": "^5.21.5",
"bootstrap": "^5.3.3",
"bootstrap-icons": "^1.11.3",
"browserify-fs": "^1.0.0",
"chart.js": "^4.4.6",
"concurrently": "^6.5.1",
"cross-env": "^7.0.3",
"echarts": "^5.5.1",
"path-browserify": "^1.0.1",
"react": "^18.3.1",
"react-bootstrap": "^2.10.5",
"react-chartjs-2": "^5.2.0",
"react-circular-progressbar": "^2.1.0",
"react-dom": "^18.3.1",
"react-router-dom": "^6.27.0",
"react-scripts": "5.0.1",
"wait-on": "^5.3.0",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build-react": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"start-electron": "concurrently \"cross-env BROWSER=none npm start\" \"wait-on http://localhost:3000 && electron .\"",
"package": "electron-builder"
},
"build": {
"appId": "com.EvantageSoftware.TTAApplication",
"productName": "TTA Application",
"directories": {
"output": "dist"
},
"files": [
"build/**/*",
"main.js",
"preload.js",
"data/**/*",
"portable-python/**/*",
"src/Progress_Dashboard/**/*",
"src/Settings/**/*",
"src/Parts_List/**/*",
"src/assets/**/*"
],
"extraMetadata": {
"main": "main.js"
},
"extraResources": [
{
"from": "portable-python",
"to": "portable-python",
"filter": ["**/*"]
},
{
"from": "data",
"to": "data",
"filter": ["**/*"]
},
{
"from": "src/Progress_Dashboard",
"to": "Progress_Dashboard",
"filter": ["**/*.jsx", "**/*.py", "**/*.json"]
},
{
"from": "src/Parts_List",
"to": "Parts_List",
"filter": ["**/*.jsx", "**/*.json", "**/*.py"]
},
{
"from": "src/Settings",
"to": "Settings",
"filter": ["**/*.jsx", "**/*.json"]
}
],
"asarUnpack": [
"**/*.py",
"portable-python/**/*",
"data/**/*"
],
"win": {
"target": {
"target": "nsis",
"arch": ["x64"]
},
"icon": "public/assets/favicon.ico"
},
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true
}
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"electron": "^33.0.1",
"electron-builder": "^25.1.8",
"react-scripts": "5.0.1",
"@testing-library/react": "^13.4.0",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/user-event": "^13.5.0"
}
}
Я запускаю build-react, а затем package, а затем перехожу в dist\win-unpacked, чтобы проверить файл py или попробовать запустить приложение.
Ниже приведена часть моего файла main.js, и вот как запускается мой скрипт Python и жизненный цикл приложения:
function startPythonScript(config) {
console.log("Python Executable Path (startPythonScript) 1:", pythonExecutable);
console.log("Python Script Path (startPythonScript) 1:", pythonScript);
console.log("Starting Python script(func)...");
// const pythonProcess = spawn(quotedPythonExecutable, [pythonScript], {
// // shell: true,
// cwd: path.join(__dirname, 'src', 'Progress_Dashboard'),
// });
const pythonProcess = execFile(pythonExecutable, [pythonScript], {
cwd: path.join(__dirname, 'src', 'Progress_Dashboard'),
});
pythonProcess.stdout.on('data', (data) => {
console.log(`Python Output: ${data}`);
});
pythonProcess.stderr.on('data', (data) => {
console.error(`Python Error: ${data}`);
});
pythonProcess.on('close', (code) => {
if (code !== 0) {
console.error(`3 Python script exited with code ${code}`);
} else {
console.log('Python script completed successfully.');
}
});
return pythonProcess;
}
const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, "preload.js"),
nodeIntegration: false,
contextIsolation: true,
},
});
const startURL = app.isPackaged
? `file://${path.join(__dirname, "build", "index.html")}`
// : `file://${path.join(__dirname, "build", "index.html")}`;
: "http://localhost:3000";
win.loadURL(startURL);
}
// Electron App Lifecycle
app.whenReady().then(() => {
if (app.isPackaged) {
startPythonScript();
}
createWindow();
});
Подробнее здесь: https://stackoverflow.com/questions/792 ... ble-python
Проблема с упаковкой электронного приложения с помощью портативного Python ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как установить значок для портативного исполняемого приложения Flutter в Linux?
Anonymous » » в форуме Linux - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Лучшие практики для портативного приложения с открытым исходным кодом на C++ [закрыто]
Anonymous » » в форуме C++ - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-