Как сделать exe файл из python проекта
Перейти к содержимому

Как сделать exe файл из python проекта

  • автор:

Создание exe из python проекта

Написал счетчик даты, с сохранением данных в google sheets. Теперь хочу сделать .exe файл из своего проекта. Использовал pyinstaller, проект компилируется, но после не открывается. Мне кажется, что проблема в том, что я использую google drive api и (или) pyQT. В чем может быть проблема? Код проекта по классам ниже. Проект в первую очередь обучающий, поэтому код тут далеко непрофессиональный, компилирую в exe тоже только ради обучения Класс sheets — отправляет и принимает данные из таблицы.

import httplib2 import apiclient.discovery from oauth2client.service_account import ServiceAccountCredentials class GoogleSheet: def __init__(self): self.CREDENTIALS_FILE = 'files/clock-project-271214-6f2207203513.json' self.credentials = ServiceAccountCredentials.from_json_keyfile_name( self.CREDENTIALS_FILE, ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive'] ) self.http_auth = self.credentials.authorize(httplib2.Http()) self.service = apiclient.discovery.build('sheets', 'v4', http=self.http_auth) self.spreadsheetId = '1FGyQ_oxEUu1V_2rnbz5Fb5apSZzt0c9XIuaExF0ANhA' self.sheetId = 0 def read_data(self, start_cell, end_cell): """ Читает данные из таблицы :param start_cell: Индекс верхней левой клетки :param end_cell: Индекс нижней правой клетки """ ranges = ["Лист номер один!:".format(start_cell, end_cell)] results = self.service.spreadsheets().values().\ batchGet( spreadsheetId=self.spreadsheetId, ranges=ranges, valueRenderOption='UNFORMATTED_VALUE', dateTimeRenderOption='FORMATTED_STRING' ).execute() sheet_values = results['valueRanges'][0]['values'] c = -1 for i in range(len(sheet_values[0])): if len(sheet_values[0][i]) < 2: while len(sheet_values[0][i]) < 2: sheet_values[0][i] = '0' + str(sheet_values[0][i]) c += 1 if c != -1: self.send_data(start_cell, end_cell, sheet_values) return sheet_values def send_data(self, cell_start, cell_end, data): """ Записывает данные в таблицу :param cell_start: Индекс верхней левой клетки :param cell_end: Индекс нижней правой клетки :param data: Массив данных """ self.service.spreadsheets().values().batchUpdate(spreadsheetId=self.spreadsheetId, body=< "valueInputOption": "USER_ENTERED", "data": [ <"range": "Лист номер один!:".format(cell_start, cell_end), "majorDimension": "ROWS", "values": data> ] >).execute() 

Класс clock — занимается работой с датой и временем в счетчике.

from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QLCDNumber, QPushButton from PyQt5.QtCore import QTimer, QTime, QDateTime import design import sheet import webbrowser class Clock(QtWidgets.QMainWindow, design.Ui_MainWindow, QLCDNumber): text = '' max_delta = 0 def __init__(self): super().__init__() self.setupUi(self) self.gsheet = sheet.GoogleSheet() title = "Days without coronavirus. " self.setWindowTitle(title) self.lcdNumber.setSegmentStyle(QLCDNumber.Filled) self.btnReset.clicked.connect(self.to_null) self.btnOpenData.clicked.connect(self.open_data) timer = QTimer(self) timer.timeout.connect(self.show_time) timer.start(1000) timer_send = QTimer(self) timer_send.timeout.connect(self.send_delta_max) timer_send.start(10000) self.last_date = self.get_date() self.sec_start = QDateTime.currentSecsSinceEpoch() self.sec_last = self.sec_start self.delta = 0 self.set_delta(self.sec_start, self.sec_last) self.max_delta = self.delta self.was_null = False self.new_max = False def to_null(self): """ Обнуляет счетчик и отправляет данные в таблиц """ self.was_null = True self.last_date = self.get_date() self.sec_last = self.sec_start self.gsheet.send_data('A5', 'F5', [list(self.last_date.values())]) self.gsheet.send_data('A3', 'F3', [list(self.get_values(self.delta).values())]) def open_data(self): """ Вызывается при нажатии кнопки и открывает таблицу с данными в браузере """ url = 'https://docs.google.com/spreadsheets/d/' + self.gsheet.spreadsheetId webbrowser.open(url) def format_date(self, yrs, mns, days, hrs, mints, secs): """ Форматирует дату, убирая оттуда нулевые значения для нормального отображения в приложении :param yrs: количество лет :param mns: количество месяцев :param days: количество дней :param hrs: количество часов :param mints: количество минут :param secs: количество секунд :return: Отформатированная строка с данными """ if int(yrs) != 0: res = yrs + ' ' + mns + ' ' + days + ' ' + hrs \ + ':' + mints + ':' + secs if int(yrs) < 10: digit_count = 16 else: if int(yrs) < 100: digit_count = 17 else: digit_count = 19 else: if int(mns) != 0: res = mns + ' ' + days + ' ' + hrs \ + ':' + mints + ':' + secs digit_count = 14 else: if int(days) != 0: res = days + ' ' + hrs \ + ':' + mints + ':' + secs digit_count = 11 else: if int(hrs) != 0: res = hrs + ':' + mints + ':' + secs digit_count = 8 else: res = mints + ':' + secs digit_count = 5 self.lcdNumber.setDigitCount(digit_count) return res def send_delta_max(self): """ Записывает в таблицу максимум счетчика за все время """ self.gsheet.send_data('A3', 'F3', [list(self.get_values(self.delta).values())]) if self.new_max: self.gsheet.send_data('A8', 'F8', [list(self.get_values(self.max_delta).values())]) self.new_max = False def check_max(self): """ Обновляет значение максимума """ if self.delta >self.max_delta: self.max_delta = self.delta self.new_max = True def set_delta(self, now_time, last_time): """ Высчитвает разницу между now_time и last_time и записывает ее в self.delta :param now_time: настоящее время :param last_time: время последнего обнуления счетчика """ self.delta = now_time - last_time self.check_max() def show_time(self): """ Отображает self.delta в приложении """ self.sec_start = QDateTime.currentSecsSinceEpoch() self.set_delta(self.sec_start, self.sec_last) res = self.format_date( self.get_values(self.delta).get('Year'), self.get_values(self.delta).get('Month'), self.get_values(self.delta).get('Day'), self.get_values(self.delta).get('Hours'), self.get_values(self.delta).get('Minutes'), self.get_values(self.delta).get('Seconds') ) self.lcdNumber.display(res) def get_values(self, value): """ переводит время из секунд с начала эпохи в обычный формат :param value: время для перевода в секундах """ v_secs = str(value % 60) v_mints = str(value % 3600 // 60) v_hrs = str(value % (3600 * 24) // 3600) v_days = str((value % (3600 * 24 * 12) // (3600 * 24))) v_mons = str((value % (3600 * 24 * 365) // (3600 * 24 * 12))) v_yrs = str(value // (3600 * 24 * 365)) return < 'Year': v_yrs, 'Month': v_mons, 'Day': v_days, 'Hours': v_hrs, 'Minutes': v_mints, 'Seconds': v_secs, >def make_sec_from_list(self, gs_data): """ Переводит время из строки в секунды с начала эпохи :param gs_data: массив данных из таблицы """ row = gs_data[0] date_time = QDateTime.fromString(' '.join(row), "yyyy MM dd hh mm ss") return QDateTime.toSecsSinceEpoch(date_time) @staticmethod def get_date(): """ Получает текущуие дату и время :return: """ return

И, собственно, main файл

from PyQt5.QtWidgets import QApplication import sheet import clock import sys try: app = QApplication(sys.argv) watch = clock.Clock() watch.show() gsheet = sheet.GoogleSheet() watch.sec_last = watch.make_sec_from_list(gsheet.read_data('A5', 'F5')) app.exec() gsheet.send_data('A3', 'F3', [list(watch.get_values(watch.delta).values())]) gsheet.send_data('A8', 'F8', [list(watch.get_values(watch.max_delta).values())]) except BaseException as error: print(error) 

Python: Уроки Python / Как в PyCharm создать EXE файл — видео HD

Python: Уроки Python / Как в PyCharm создать EXE файл - видео

Привет друзья! Сегодня покажу как в PyCharm создать exe файл из вашего проекта на Python. В этом видео есть ответ на вопрос: как сделать запускаемый файл из программы на Python? На этом уроке мы с вами:✔ Установим модуль pyinstaller для конвертации проекта на Python в запускаемый файл EXE.✔ Превратим файл Python в EXE файл (выполняемый файл) и запустим его. Как сделать EXE файл в python? Это простой способ скомпилировать python файл в exe: 1) Пишем команду pip install pyinstaller2) Запускаем pyinstaller имя_файла_python.pyГотово!Где нас можно найти ►✔ Вступай в группу ВК — vk.com/wiseplat ✔ Дополнительные уроки с домашними заданиями можно найти на сайте WISEPLAT: wiseplat.org/ ✅ Теперь вы можете создавать свои интерактивные приложения с помощью Python! Уроки по Python помогут в этом!#урокиpython #урокипитон #python #программирование #дляначинающих- Уроки от #OlegShpagin

24.06.2020 10:47
Sound language:
RUS — Русский
Провайдер видео:

Ссылка на страницу ролика: Код ролика: Код для плейлиста: Размер видео: × Отменить Автозапуск воспроизведения Код для плейлиста Начинать с текущего видео

развернуть свернуть

  • Видео
  • Разработка ПО и приложений
  • Разработка на Python
  • Python: Уроки Python / Как в PyCharm создать EXE файл — видео

Изучаем мир ИТ / Олег Шпагин / WISEPLAT
24.06.2020 10:49
►► Все уроки по Python
►► Все уроки по администрированию
Пишите кто компилировал так файл 🙂
Daruma San
24.06.2020 18:47

Скажите пожалуйста, а как сделать так чтоб при запуске программы не выводилась консоль и все работало как надо?

24.06.2020 19:15
классный акцент
24.06.2020 20:06

Можно прописать pyinstaller -F название файла, чтобы не было много папок. И pyinstaller -i «путь к иконки» название файла, если хотите добавить иконку

Артур Вдовиченко
28.06.2020 17:05

Подскажите, сделал всё так как у Вас, но почему после открытия програмы она работает и принимает значения, а когда нужно выводить результат она закрывается полностью?

marat buriyev
30.06.2020 12:49
Здраствуйти Олег Шпагин я хотел научиться пайтон
29.07.2020 18:32

А у меня при установке pyinstaller выводит ошибку:

D:\Programming\My programs\Ruslan_Joke>pip install pyinstaller
Collecting pyinstaller
Using cached PyInstaller-3.6.tar.gz (3.5 MB)
Installing build dependencies… done
Getting requirements to build wheel… done
Preparing wheel metadata… error
ERROR: Command errored out with exit status 1:
command: ‘C:\Users\Медиа Продюсер\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\python.exe’ ‘C:\Users\Медиа Продюсер\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\
LocalCache\local-packages\Python38\site-packages\pip\_vendor\pep517\_in_process.py’ prepare_metadata_for_build_wheel ‘C:\Users\Медиа Продюсер\AppData\Local\Temp\tmplpd2l4jq’
cwd: C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-install-y0bdjbyn\pyinstaller
Complete output (36 lines):
running dist_info
creating C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info
writing C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info\PKG-INFO
writing dependency_links to C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info\dependency_links.txt
writing entry points to C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info\entry_points.txt
writing requirements to C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info\requires.txt
writing top-level names to C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info\top_level.txt
writing manifest file ‘C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info\SOURCES.txt’
reading manifest file ‘C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info\SOURCES.txt’
reading manifest template ‘MANIFEST.in’
Error in sitecustomize; set PYTHONVERBOSE for traceback:
SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xcc in position 0: invalid continuation byte (sitecustomize.py, line 21)
no previously-included directories found matching ‘bootloader\build’
no previously-included directories found matching ‘bootloader\.waf-*’
no previously-included directories found matching ‘bootloader\.waf3-*’
no previously-included directories found matching ‘bootloader\waf-*’
no previously-included directories found matching ‘bootloader\waf3-*’
no previously-included directories found matching ‘bootloader\_sdks’
no previously-included directories found matching ‘bootloader\.vagrant’
warning: no previously-included files found matching ‘bootloader\.lock-waf*’
no previously-included directories found matching ‘doc\source’
no previously-included directories found matching ‘doc\_build’
warning: no previously-included files matching ‘*.tmp’ found under directory ‘doc’
warning: no files found matching ‘news\_template.rst’
no previously-included directories found matching ‘news’
no previously-included directories found matching ‘old’
no previously-included directories found matching ‘scripts’
no previously-included directories found matching ‘tests\scripts’
no previously-included directories found matching ‘.github’
warning: no previously-included files found matching ‘.*’
warning: no previously-included files found matching ‘*.yml’
warning: no previously-included files found matching ‘*~’
warning: no previously-included files found matching ‘.directory’
writing manifest file ‘C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.egg-info\SOURCES.txt’
creating ‘C:\Users\Медиа Продюсер\AppData\Local\Temp\pip-modern-metadata-gb6qof1z\PyInstaller.dist-info’
error: invalid command ‘bdist_wheel’
— ERROR: Command errored out with exit status 1: ‘C:\Users\Медиа Продюсер\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\python.exe’ ‘C:\Users\Медиа Продюсер\AppData\Local\Packages\PythonSoftwareFou
ndation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pip\_vendor\pep517\_in_process.py’ prepare_metadata_for_build_wheel ‘C:\Users\Медиа Продюсер\AppData\Local\Temp\tmplpd2l4jq’ Check the logs for full comm
and output.

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Python проект в exe

#1 Фев. 14, 2021 00:25:42

Magister6239 Зарегистрирован: 2019-08-13 Сообщения: 29 Репутация: 0 Профиль Отправить e-mail

Python проект в exe

Как можно собрать python проект в один exe файл? 5 своих модулей и 4 библиотеки. Я пробовал сделать это с pyinstaller, но после сборки и запуска exe получал ошибку Failed to execute script main.
python 3.7.9
pyinstaller 4.2

Отредактировано Magister6239 (Фев. 14, 2021 00:49:02)

#2 Фев. 14, 2021 09:33:13

AD0DE412 Зарегистрирован: 2019-05-12 Сообщения: 1130 Репутация: 44 Профиль Отправить e-mail

Python проект в exe

1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например) , нажмите и вставьте ссылку на его url

есчщо

#3 Фев. 14, 2021 10:42:51

PEHDOM Зарегистрирован: 2016-11-28 Сообщения: 2196 Репутация: 294 Профиль Отправить e-mail

Python проект в exe

Magister6239
Я пробовал сделать это с pyinstaller, но после сборки и запуска exe получал ошибку Failed to execute script main.

Вам нужно собирать екзкшники без подавления консоли или добавить в свою программу логирование, чтобы все ошибки и ексепшины оно писало в файл. С pyInstaller\Cxfreeze\Nuitka, такая фигня довольно частая. Например оно может не находить какието зависимости/ Через инетрпретатор все работает без нареканий, а упакованый екзешник вам скажет что не может найти модуль тайм или енкодингс. Тогда вы тупо пишете import time в своем скрипте, обычно помогает. Иногда бывают трудности с сторонними либами но тут нужно спрашивать уже по конкретной либе, иногда нужно чтото в конфиге сборки прописать, иногда насильно добавить какойто файл с сборку, иногда еще какето танцы с бубном.
НО как по мне это все баловоство, (хотя иногда бывает нужно) можете почитать вот этот топик http://python.su/forum/topic/38353/?page=1 там все достаточно подробно разжевано.

[code python][/code]

Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 14, 2021 10:45:03)

#4 Фев. 14, 2021 19:32:34

Magister6239 Зарегистрирован: 2019-08-13 Сообщения: 29 Репутация: 0 Профиль Отправить e-mail

Python проект в exe

Спасибо. Я начал искать зависимости и в конце концов понял что это просто баги с библиотекой(pymorhy2). Пришлось скинуть эту самую зависимость в ту же папку где лежит exe и… сработало. Это библиотека ищет зависимость только в папке в которой исполняется скрипт.

Как сделать exe файл из python проекта

При установке Django в папке виртуальной среды устанавливается утилита django-admin . А на Windows также исполняемый файл django-admin.exe . Их можно найти в папке виртуальной среды, в которую производилась установка Django: на Windows — в подкаталоге Scripts , а на Linux/MacOS — в каталоге bin .

django-admin в Django и Python

django-admin предоставляет ряд команд для управления проектом Django. В частности, для создания проекта применяется команда startproject . Этой команде в качестве аргумента передается название проекта.

Итак, создадим первый на Django. Пусть он будет располагаться в той же папке, где располагается каталог виртуальной среды. И для этого вначале активируем ранее созданную виртуальную среду (например, среду .venv, которая была создана в прошлой теме, если она ранее не была активирована).

И после активации виртуальной среды выполним следующую команду

c:\django>django-admin startproject metanit

Создание проекта на Python и Django

В данном случае мы создаем проект с именем «metanit». И после выполнения этой команды в текущей папке (c:\django) будет создан каталог metanit .

Первый проект на Python и Django

Созданный каталог будет состоять из следующих элементов:

  • manage.py : выполняет различные команды проекта, например, создает и запускает приложение
  • metanit — собственно папка проекта metanit, которая содержит следующие файлы:
    • __init__.py : данный файл указывает, что папка, в которой он находится, будет рассматриваться как модуль. Это стандартный файл для программы на языке Python.
    • settings.py : содержит настройки конфигурации проекта
    • urls.py : содержит шаблоны URL-адресов, по сути определяет систему маршрутизации проекта
    • wsgi.py : содержит свойства конфигурации WSGI (Web Server Gateway Inerface). Он используется при развертывании проекта.
    • asgi.py : название файла представляет сокращение от Asynchronous Server Gateway Interface и расширяет возможности WSGI, добавляя поддержку для взаимодействия между асинхронными веб-серверами и приложениями.

    Запустим проект на выполнение. Для этого с помощью команды cd перейдем в консоли к папке проекта. И затем для запуска проекта выполним следующую команду:

    python manage.py runserver

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *