Проблема с упаковкой электронного приложения с помощью портативного PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с упаковкой электронного приложения с помощью портативного Python

Сообщение Anonymous »

Прежде чем начать, я прошу прощения за то, что этот вопрос длинный.
Я создаю электронное приложение с помощью электронного конструктора, которому необходимо запускать скрипт 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»