Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
Всем доброго времени суток! Возникла проблема запуска из скомпилированного exe-файла других скриптов, написанных на питошке) Запускаю на компе, где не установлен питон. Скомпилированного exe-файл был собран через pyinstaller обычной командой: pyinstaller avtotest.py
в коде скомпилированного exe-файла запускаю другой скрипт написанный на питошке так:
В скомпилированном exe-файле при нажатии на кнопку "Приглашения" получаю ошибку в консоли:
Код:
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter\__init__.py", line 1705, in __call__
File "avtotest.py", line 159, in Adminnewpriglash
File "subprocess.py", line 800, in __init__
File "subprocess.py", line 1207, in _execute_child
FileNotFoundError: [WinError 2] Не удается найти указанный файл
Что нужно чтобы скрипты запускались? мб изменить код запуска? Есть вариант перекомпилить все скрипты в exe и уже запускать exe файлы из главного exe, но их достаточно много и отладка станет неудобной, поэтому ищу варианты как сделать действующий код рабочим)
Некорректная сборка, программа не видит отдельные модули библиотеки Tkinter. Пользуйтесь для сборки cx_Freeze, и прописывайте эти модули вручную, указав к ним путь.
Если совсем коротко -внешнюю программу нужно положить в одну папку с основной программой, и подключить её как модуль import Adminnewpriglash но в основной программе ещё потребуются правки в коде, чтобы модуль работал. В общем гуглите Создание своего модуля.
Если совсем коротко -внешнюю программу нужно положить в одну папку с основной программой, и подключить её как модуль import Adminnewpriglash но в основной программе ещё потребуются правки в коде, чтобы модуль работал. В общем гуглите Создание своего модуля.
В вашем коде я никакой кнопки вообще не вижу, по крайней мере этой части кода не выложено. А функция avt3 выполняется, потому что вы её вызываете, не нужно этого делать.
Вот вам простенькая программа с тремя кнопками, посмотрите как я сделал вызов функций кнопками.
Python:
# -*- coding:utf -8 -*-
# !/usr/bin/python3
__version__ = 'Version: 2'
from tkinter import *
import random
from tkinter import filedialog as fd
root = Tk()
root.resizable(width=False, height=False)
root.title("Генератор паролей " + str(__version__))
root.geometry("450x324+300+300")
calculated_text = Text(root, height=14, width=50)
def erase():
calculated_text.delete('1.0', END)
chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
x = 0
def passw():
for n in range(int(number_entry.get())):
password = ''
global x
x += 1
for i in range(int(length_entry.get())):
password += random.choice(chars)
if x >= 1:
calculated_text.insert(END, "Пароль" + ' ' + str(x) + ': ' + password + "\n")
def savepass():
file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"),
("All files", "*.*")), defaultextension='')
try:
f = open(file_name, 'w')
s = calculated_text.get(1.0, END)
f.close()
f.write(s)
except FileNotFoundError:
pass
display_button = Button(text="Сгенерить", width=8, command=passw)
erase_button = Button(text="Очистить", width=8, command=erase)
save = Button(text="Сохранить", width=8, command=savepass)
number_entry = Entry(width=10, justify=CENTER)
length_entry = Entry(width=10, justify=CENTER)
number_entry.insert(0, "8")
length_entry.insert(0, "25")
number_label = Label(text=" Количество паролей")
length_label = Label(text=" Длина пароля")
number_label.grid(row=0, column=0, sticky="w")
length_label.grid(row=1, column=0, sticky="w")
number_entry.grid(row=0, column=1, padx=1, pady=5)
length_entry.grid(row=1, column=1, padx=1, pady=5)
save.grid(row=3, column=2, padx=50, pady=5, sticky="w")
display_button.grid(row=3, column=0, padx=30, pady=5, sticky="e")
erase_button.grid(row=3, column=1, padx=30, pady=5, sticky="e")
scrollb = Scrollbar(root, command=calculated_text.yview)
scrollb.grid(row=4, column=3, sticky='nsew')
calculated_text.grid(row=4, column=0, sticky='nsew', columnspan=3)
calculated_text.configure(yscrollcommand=scrollb.set)
root.mainloop()
В вашем коде я никакой кнопки вообще не вижу, по крайней мере этой части кода не выложено. А функция avt3 выполняется, потому что вы её вызываете, не нужно этого делать.
Вот вам простенькая программа с тремя кнопками, посмотрите как я сделал вызов функций кнопками.
Прощу прощение за заблуждение у меня в меню встроены label, которые я называю кнопками) в общем при нажатии на label должна вызываться функция. но сейчас работает так: если в коде убрать везде упоминание о "Adminnewpriglash", кроме как здесь "import Adminnewpriglash", то при запуске главного приложения сразу же вызывается Adminnewpriglash, что весьма странно. Если же закомментить строку "#import Adminnewpriglash", то главное приложение запускается как нужно. не пойму в чем проблема?
У Вас в коде тоже также запускается как и у меня через command:
Это и есть ответ на ваш вопрос. Я уже писал выше, что у вас функция вызывается. То есть это происходит до того, как нажимаете на меню. По-моему тут всё понятно. А так телепатов нет, чтобы на конкретную строку указать, нужны кода обоих программ.
1. Пытаюсь запустить Ваш этот "Конвертер", используя "python PyInstallerGUI.py", и вижу следующее:
Traceback (most recent call last):
File "PyInstallerGUI.py", line 22, in <module>
from PIL import Image, ImageTk, ImageOps
ModuleNotFoundError: No module named 'PIL'
PS C:\Users\garri\OneDrive\Desktop\ЭДУАРД\Programming\PyInstallerGUI-master>
2. Пытаюсь загрузить "PIL", используя "pip install PIL", и вижу следующее:
ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
ERROR: No matching distribution found for PIL
НУ И КАКИМ ЖЕ ОБРАЗОМ ВЫ ЗАПУСКАЕТЕ ЭТОТ ТАК НАЗЫВАЕМЫЙ "КОНВЕРТЕР"???
1. Пытаюсь запустить Ваш этот "Конвертер", используя "python PyInstallerGUI.py", и вижу следующее:
Traceback (most recent call last):
File "PyInstallerGUI.py", line 22, in <module>
from PIL import Image, ImageTk, ImageOps
ModuleNotFoundError: No module named 'PIL'
PS C:\Users\garri\OneDrive\Desktop\ЭДУАРД\Programming\PyInstallerGUI-master>
2. Пытаюсь загрузить "PIL", используя "pip install PIL", и вижу следующее:
ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
ERROR: No matching distribution found for PIL
НУ И КАКИМ ЖЕ ОБРАЗОМ ВЫ ЗАПУСКАЕТЕ ЭТОТ ТАК НАЗЫВАЕМЫЙ "КОНВЕРТЕР"???
Убедись что запускаешь pip из того-же окружения что и pyinstaller.
А так-же, я не рекомендую использовать GUI версию pyinstaller.
Мало ли ее же тоже люди пишут и обновляют. От того и могут возникнуть ошибки.
Вот у меня тоже спортивный интерес возник.
Каким образом можно максимально уменьшить размер получаемого .exe файла.
Если к примеру, в моем .exe не используются сторонние модули, то вес моего .exe получается 6.5мб.
Можно ли, к примеру вырезать из интерпретатора python ненужные "стандартные" модули, такие как tkinter, email, imaplib, и выиграть тем самым еще пару мегабайт?
1. Пытаюсь запустить Ваш этот "Конвертер", используя "python PyInstallerGUI.py", и вижу следующее:
Traceback (most recent call last):
File "PyInstallerGUI.py", line 22, in <module>
from PIL import Image, ImageTk, ImageOps
ModuleNotFoundError: No module named 'PIL'
PS C:\Users\garri\OneDrive\Desktop\ЭДУАРД\Programming\PyInstallerGUI-master>
2. Пытаюсь загрузить "PIL", используя "pip install PIL", и вижу следующее:
ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
ERROR: No matching distribution found for PIL
НУ И КАКИМ ЖЕ ОБРАЗОМ ВЫ ЗАПУСКАЕТЕ ЭТОТ ТАК НАЗЫВАЕМЫЙ "КОНВЕРТЕР"???
Уже был ответ, во-первых pyinstaller не поддерживается Python версии более чем 3.7.0 Во-вторых модуль PIL давно обновился и называется pillow, поставить можно так: sudo easy_install pillow
Ну и надстройками пользоваться не обязательно, всё делается одной командой - pyinstaller -clean -windowed -onefile -noupx main_name_programm.py
Нет никакого "ядра" python. На скриншоте показал, где находятся файлы питона на винде. В либах стандартные модули, tkinter в папке tcl. Можно экспериментировать как угодно - сначала сохранить оригинальные файлы куда-нибудь, и пробовать удалять "ненужное".
Нет никакого "ядра" python. На скриншоте показал, где находятся файлы питона на винде. В либах стандартные модули, tkinter в папке tcl. Можно экспериментировать как угодно - сначала сохранить оригинальные файлы куда-нибудь, и пробовать удалять "ненужное".
спасибо, товарищ. Как ни странно для меня, но это работает, и что главное - всего 27 мб. А то я с нового года копаю python ради своей идеи/программки, и тут сюрприз - deploy. Это как если написать новый код для новичка (которому 51). Почему элементарное не может быть простым, вот вопрос? Благодаря вам это возможно. А то пытался сделать: pyinstaller --onefile --icon=name.ico --noconsole myscript.py - не работает как надо, консоль включается. Спасибо.
Уже был ответ, во-первых pyinstaller не поддерживается Python версии более чем 3.7.0 Во-вторых модуль PIL давно обновился и называется pillow, поставить можно так: sudo easy_install pillow
Ну что касается пункта "во-первых" - у меня Python версии "3.8.1" и "Pyinstaller" у меня очень даже неплохо работает!
А что касается пункта "во-вторых" - информацию насчёт "pillow" принял к сведению, попробую это, посмотрю что получится и отпишусь, спасибо!
Ну вот я и вернулся с моря. Очень хорошо что есть баг, это заставило меня провести небольшое исследование по сборке файлов в EXE.
Для этого я прогнал разные ресурсы и выяснил по крайней мере 3 причины, по которым компилл не получается как надо.
Грабли, грабли, грабли...
1. Отсутствуют некоторые библиотеки dll в самой винде.
2. Присутствует скрытый импорт в модуле. В музыкальной открытке есть предупреждение: WARNING: Hidden import "pygame._view" not found!
Соответственно сборщик не может знать путей к нужному модулю.
3. Файл "моя программа.py" изначально не запускается двойным кликом мышки, а лишь через IDLE и т.п.
1 пункт решается просто - из лога копипастим название dll, гуглим, скачиваем нужную библиотеку и добавляем в system32.
2 пункт можно обойти заменой на схожий модуль ( а ведь всегда есть варианты), но не имеющий скрытый импорт.
3 Ну здесь даже если не будет ни одной ошибки или предупреждения, то сборка обречена на провал. И единственным выходом будет переписать код программы.
Наверняка и другие проблемы бывают, это лишь то что я увидел.
Вывод можно сделать следующий - не все программы корректно соберутся, и если какую-то программку очень нужно собрать в экзешник, придётся её перепиливать. И это может занять больше времени, чем изначальное написание.
Так как за 2 недели никого не нашлось, кто поправил бы код, делаю это сам
Всё просто - аргумент 'defaultextension' не указал, всего лишь добавить его в функцию extractText нужно, получится так:
Скачанный файлик кидаем в корень диска С и в cmd вводим команду: pip install С:\cx_Freeze-5.1.1-cp36-cp36m-win32.whl (название своей версии, если оно отличается)
В каталоге с программой которую нужно скомпилировать создайте файл "setup.py" в который разместите код:
Python:
from cx_Freeze import setup, Executable
setup(
name = "название проги",
version = "1.0",
description = "описание - необязательно",
executables = [Executable("free.py")]
)
Последний этап - переходим в cmd в папку с программой, которую нужно упаковать и вводим команду python.exe setup.py build
При успешной сборке появится папка build, в которой и будет наш EXE.
К сожалению, в отличии от pyinstaller, сборка не будет в один файл, а будет куча библиотек и прочего, без которых экзешник работать не будет. По сути мы получим портабл версию. В этом минус. Плюс заключается в том, что настройки гибкие, и даже очень упрямые программы можно собрать этим инструментом.
Попробовал собрать открытку из темы Ваяем музыкальную открытку на Python со стандартным файлом setup.py ничего не получилось. Пришлось колдовать часа 1,5 чтобы решить все вопросы.
Сначала cx_Freeze ругалась на модуль tkinter, так как не могла найти пути к tcl8.6 и tk8.6. Вручную прописал, на этом трудности не закончились. Дальше захотелось ей dll-ок, тоже добавил. Вдоволь поизвращавшись, прога успешно собралась.
Однако бесячее окно с надписью от модуля pygame резало глаза
Смотри,на моём -всё прекрасно работает. Скопировал всю папку на флешку, воткнул на другом компе, попытался открыть exe-шник и тут получил ошибку ввиде:
-не найден python38.dll
Нашёл его у себя на компе -> копировал во все папки билдера сначала по очереди, потом во все сразу. Всё равно не видит его. Что делать?
На данном сайте используются cookie-файлы, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших cookie-файлов.