использование pyinstaller на python с gui открывает и закрывает приложение без выполнения - PullRequest
1 голос
/ 04 марта 2020

У меня есть программа python, которая использует kivy и создает gui. Я пытался сделать программу исполняемой, используя pyinstaller, но когда я пытаюсь запустить exe-файл, он сразу же открывает и закрывает приложение. Я попытался запустить exe с помощью cmd, но он просто открыл его в другом окне и сразу же закрыл, я также попытался использовать флаг - c при использовании pyinstaller для файла .py, но изменений не было. Что я могу сделать, чтобы решить эту проблему?

Редактировать: я попытался добавить печать ("привет") в первой строке, а затем выйти сразу после нее, а затем я снова создал исполняемый файл, но результат не ' t, файл открылся и закрылся немедленно. Поэтому я попытался запустить приложение с помощью cmd с start /B, заставив его запустить в cmd, я увидел, что оно получило следующую ошибку

C:\Users\YShay\Desktop\New folder\dist>Traceback (most recent call last):
File "C:\Users\YShay\AppData\Local\Programs\Python\Python38\Lib\sitepackages\PyInstaller\loader\rthooks\pyi_rth_pkgres.py", line 13, in <module>
import pkg_resources as res
File "c:\users\yshay\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 623, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\pkg_resources\__init__.py", line 86, in <module>
ModuleNotFoundError: No module named 'pkg_resources.py2_warn'
[19380] Failed to execute script pyi_rth_pkgres 

Означает ли это, что pyinstaller не смог импортировать один из модулей? ? Если да, то как я могу импортировать его или сделать его доступным для приложения?

Это все импорты моей программы:

import socket
import sys
import threading
import psutil
import socket
import subprocess
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from functools import partial

1 Ответ

0 голосов
/ 25 марта 2020

Во-первых, если вы не можете установить Kivy на Python 3.8, вы можете установить его, набрав:

python -m pip install docutils pygments pypiwin32 kivy_deps.sdl2==0.1.* kivy_deps.glew==0.1.*
python -m pip install kivy_deps.gstreamer==0.1.*
python -m pip install kivy_deps.angle==0.1.*
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew --extra-index-url https://kivy.org/downloads/packages/simple
pip install kivy[base] kivy_examples --pre --extra-index-url https://kivy.org/downloads/simple/

Затем, когда вы упакуете приложение Kivy GUI с Pyinstaller, и вы увидите ошибку, связанную с:

Failed to execute script pyi_rth_pkgres 

Просто удалите setuptools и установите версию 44.0.0 ( ссылка )

pip uninstall setuptools

pip install setuptools==44.0.0

Также, упаковка немного сложна, потому что это сделано в два шага Официальное руководство по упаковке Kivy с Pyinstaller :

перейдите в каталог примеров Kivy. Для меня это выглядит так:

C: \ Users \ YOUR- WINDOWS -USERNAME \ AppData \ Local \ Programs \ Python \ Python38-32 \ share \ kivy-examples \ demo \ touchtracer

создайте каталог для упакованного приложения и перейдите к нему. Затем в этом каталоге введите:

python -m PyInstaller --name touchtracer C:\Users\YOUR-WINDOWS-USERNAME\AppData\Local\Programs\Python\Python38-32\share\kivy-examples\demo\touchtracer\main.py

Вы увидите, что файл * .spe c создан. Откройте его в текстовом редакторе.

В начале файла, сразу после

#-*- mode: python ; coding: utf-8 -*

Нажмите клавишу ввода и введите

из kivy_deps import sdl2, glew

Убедитесь, что ваш COLLECT будет выглядеть так (добавьте два дерева):

coll = COLLECT(exe, Tree('examples-path\\demo\\touchtracer\\'),
           a.binaries,
           a.zipfiles,
           a.datas,
           *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
           strip=False,
           upx=True,
           name='touchtracer')

Теперь вернемся к CMD. Создайте приложение, используя отредактированный файл spe c: python -m PyInstaller touchtracer.spe c

Ваш скомпилированный exe-файл будет в

C: \ Пользователи \ YOUR- WINDOWS -USERNAME \ AppData \ Local \ Programs \ Python \ Python38-32 \ share \ kivy-examples \ demo \ touchtracer \ paczka \ dist \ touchtracer

Для целей упаковки Теперь вы можете проверить, работает ли exe на другом компьютере.

...