Я написал скрипт:
from tkinter import *
root= Tk()
root.title('Hello World')
text_label0 = Label(text = "Hello World!")
text_label0.pack()
root.mainloop()
Когда я запускаю его в блокноте Jupyter, окно tkinter отображается правильно и закрывается только при нажатии кнопки выхода. Ничего проблемного.
Но потом я преобразовал скрипт в .exe-файл. Его имя test1_tkinter.exe. Ранее это был test1_tkinter.ipynb.
Теперь, когда я дважды щелкаю test1_tkinter.exe, командный центр Windows открывается примерно на несколько миллисекунд и автоматически закрывается. Окно tkinter не открыто.
Я преобразовал test1_tkinter.ipynb в test1_tkinter.exe, чтобы ввести в командный центр Windows:
pyinstaller --onefile test1_tkinter.ipynb
и работало без проблем, потому что потом был создан test1_tkinter.exe.
Так что я не знаю, в чем причина проблемы. Может ли кто-нибудь помочь мне?
Обновлено: Большое спасибо за ваш быстрый и простой ответ, Orangepeels. Когда я делаю, как вы говорите, приходит:
C:\Users\Lenovo>pyinstaller test1_tkinter.ipynb --onefile --windowed
107 INFO: PyInstaller: 4.1
107 INFO: Python: 3.9.1
107 INFO: Platform: Windows-10-10.0.18362-SP0
108 INFO: wrote C:\Users\Lenovo\test1_tkinter.spec
111 INFO: UPX is not available.
122 INFO: Extending PYTHONPATH with paths
['C:\\Users\\Lenovo', 'C:\\Users\\Lenovo']
132 INFO: checking Analysis
147 INFO: Building because C:\Users\Lenovo\test1_tkinter.ipynb changed
147 INFO: Initializing module dependency graph...
151 INFO: Caching module graph hooks...
171 INFO: Analyzing base_library.zip ...
3843 INFO: Processing pre-find module path hook distutils from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks\\pre_find_module_path\\hook-distutils.py'.
3845 INFO: distutils: retargeting to non-venv dir 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib'
6719 INFO: Caching module dependency graph...
6879 INFO: running Analysis Analysis-00.toc
6883 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
required by c:\users\lenovo\appdata\local\programs\python\python39\python.exe
6958 WARNING: lib not found: api-ms-win-core-path-l1-1-0.dll dependency of c:\users\lenovo\appdata\local\programs\python\python39\python39.dll
6976 INFO: Analyzing C:\Users\Lenovo\test1_tkinter.ipynb
6979 INFO: Processing module hooks...
6980 INFO: Loading module hook 'hook-difflib.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
6983 INFO: Excluding import of doctest from module difflib
6983 INFO: Loading module hook 'hook-distutils.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
6986 INFO: Loading module hook 'hook-distutils.util.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
6989 INFO: Excluding import of lib2to3.refactor from module distutils.util
6989 INFO: Loading module hook 'hook-encodings.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7107 INFO: Loading module hook 'hook-heapq.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7109 INFO: Excluding import of doctest from module heapq
7110 INFO: Loading module hook 'hook-lib2to3.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7180 INFO: Loading module hook 'hook-multiprocessing.util.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7182 INFO: Excluding import of test from module multiprocessing.util
7182 INFO: Excluding import of test.support from module multiprocessing.util
7183 INFO: Loading module hook 'hook-pickle.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7185 INFO: Excluding import of argparse from module pickle
7186 INFO: Loading module hook 'hook-sysconfig.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7188 INFO: Loading module hook 'hook-xml.etree.cElementTree.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7189 INFO: Loading module hook 'hook-xml.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7270 INFO: Loading module hook 'hook-_tkinter.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7447 INFO: checking Tree
7519 INFO: checking Tree
7628 INFO: checking Tree
7662 INFO: Looking for ctypes DLLs
7705 INFO: Analyzing run-time hooks ...
7709 INFO: Including run-time hook 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py'
7720 INFO: Looking for dynamic libraries
8038 INFO: Looking for eggs
8039 INFO: Using Python library c:\users\lenovo\appdata\local\programs\python\python39\python39.dll
8040 INFO: Found binding redirects:
[]
8044 INFO: Warnings written to C:\Users\Lenovo\build\test1_tkinter\warn-test1_tkinter.txt
8112 INFO: Graph cross-reference written to C:\Users\Lenovo\build\test1_tkinter\xref-test1_tkinter.html
8129 INFO: checking PYZ
8144 INFO: Building because toc changed
8144 INFO: Building PYZ (ZlibArchive) C:\Users\Lenovo\build\test1_tkinter\PYZ-00.pyz
8880 INFO: Building PYZ (ZlibArchive) C:\Users\Lenovo\build\test1_tkinter\PYZ-00.pyz completed successfully.
8903 INFO: checking PKG
8906 INFO: Building because toc changed
8906 INFO: Building PKG (CArchive) PKG-00.pkg
10964 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
10967 INFO: Bootloader c:\users\lenovo\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\bootloader\Windows-64bit\runw.exe
10967 INFO: checking EXE
10979 INFO: Building because console changed
10980 INFO: Building EXE from EXE-00.toc
10982 INFO: Appending archive to EXE C:\Users\Lenovo\dist\test1_tkinter.exe
11135 INFO: Building EXE from EXE-00.toc completed successfully.
Но когда я открываю .exe-файл, появляется сообщение об ошибке: «Не удалось выполнить скрипт test1_tkinter.exe»
Что я могу сделать сейчас?
Обновлено еще раз: Когда я открываю test1_tkinter.exe через командную строку, командная строка показывает следующее:
C:\Users\Lenovo\dist>test1_tkinter.exe
Traceback (most recent call last):
File "test1_tkinter.ipynb", line 22, in <module>
NameError: name 'null' is not defined
[7536] Failed to execute script test1_tkinter
К сведению: всего 9 строк, 22 строчки в сценарии нет.
Это только тогда, когда я использую «pyinstaller --onefile test1_tkinter» для создания .exe-файла. Когда я использую «pyinstaller test1_tkinter --onefile --windowed», появляется сообщение об ошибке («Не удалось выполнить сценарий test1_tkinter.exe», - упоминалось выше) через дополнительное небольшое окно, и это окно не исчезает автоматически.
Привет, so_question_asker
Спасибо за быстрый ответ, Роман. Я попробовал, и вы можете прочитать результат в основном посте после «EDIT 2».
Я обновил ответ [stackoverflow.com/a/65386056/11688889] на основе ("EDIT 2"), см. ниже. удачи!
Большое спасибо, Зише! Теперь это сработало! Спасибо за стойкость в помощи мне. И спасибо всем остальным, кто тоже пытался решить мою проблему!
Я считаю, что использование оконного флага решит проблему:
pyinstaller имя_файла — один файл — оконный
Пожалуйста, прочитайте в моем исходном сообщении над вашим комментарием после «Редактировать:»
Вы используете conda или pip для установки pyinstaller? Это только мой личный опыт, но у меня были проблемы с использованием pyinstaller, когда он был установлен через conda. Я смог запустить ваш код, используя pyinstaller с файлом .py, а не с .ipynb. Как говорили другие, лучше всего запустить .exe непосредственно из открытой командной строки, чтобы вы могли прочитать сообщения об ошибках.
Спасибо за ответ, Orangepeel. Я использовал pip для установки pyinstaller. Я сделал это дважды, так как столкнулся с проблемой, но лучше не стало. Я попробую идею с командной строкой. Спасибо.
Теперь это работает. Спасибо всем, кто помогал мне!
Скорее всего, есть сообщение об ошибке, но оно закрывается слишком быстро, чтобы его можно было прочитать.
Чтобы иметь возможность прочитать сообщение об ошибке, выполните следующие действия:
Сообщение об ошибке должно отображаться в окне командной строки и не закрываться сразу, чтобы вы могли продолжить изучение проблемы.
Обновлено:
На основании сообщения об ошибке: pyinstaller нуждается в файле .py для создания функционального файла .exe и не поддерживает преобразование из файлов .ipynb.
Лучше всего загрузить файл из блокнота jupyter («Файл» > «Загрузить как» > «Python (.py)»), а затем преобразовать его в файл .exe.
Большое спасибо, Зише. Я сделал, как вы описали, и разместил результат в основном комментарии после «EDIT 2». Пожалуйста, прочитайте выше. Большое спасибо.
Большое спасибо, Зише! Теперь это сработало! Спасибо за стойкость в помощи мне. И спасибо всем остальным, кто тоже пытался решить мою проблему!
Как только вы создадите файл в Windows cmd, не выходите из cmd, введите «test1_tkinter.exe», чтобы проверить его. Таким образом, вы увидите сообщение об ошибке, которое вызывает сбой программы.