- Собираем проект на python3&PyQT5 под Windows, используя PyInstaller
- Немного о Pyinstaller
- Приступаем к сборке
- Python-сообщество
- Уведомления
- #1 Июнь 25, 2013 13:49:32
- pyinstaller не работает и не выдаёт ошибок
- Как исправить ошибку «pyinstaller не является внутренней или внешней командой, исполняемой программой или пакетным файлом»?
- Не работает pyinstaller?
- Что делать, если pyinstaller не может найти динамические или пользовательские библиотеки?
- 3 ответа
- Py to exe Project
Собираем проект на python3&PyQT5 под Windows, используя PyInstaller
Причиной написания статьи, явилось огромное количество постоянно возникающих у новичков вопросов такого содержания: «Как собрать проект c pyqt5», «Почему не работает», «Какой инструмент выбрать» и т.д. Сегодня научимся собирать проекты без мучений и танцев с бубном.
Как-то пришлось написать небольшое desktop-приложение. В качестве языка программирования для разработки был выбран python, поскольку для решения моей задачи он подходил идеально. В стандартную библиотеку Python уже входит библиотека tkinter, позволяющая создавать GUI. Но проблема tkinter в том, что данной библиотеке посвящено мало внимания, и найти в интернете курс, книгу или FAQ по ней довольно-таки сложно. Поэтому было решено использовать более мощную, современную и функциональную библиотеку Qt, которая имеет привязки к языку программирования python в виде библиотеки PyQT5. Более подробно про PyQT можете почитать здесь. В качестве примера я буду использовать код:
Если вы более-менее опытный разработчик, то понимаете, что без интерпретатора код на python не запустить. А хотелось бы дать возможность каждому пользователю использовать программу. Вот здесь к нам на помощь и приходят специальные библиотеки позволяющие собирать проекты в .exe, которые можно потом без проблем запустить, как обычное приложение.
Существует большое количество библиотек, позволяющих это сделать, среди которых самые популярные: cx_Freeze, py2exe, nuitka, PyInstaller и др. Про каждую написано довольно много. Но надо сказать, что многие из этих решений позволяют запускать код только на компьютере, с предустановленным интерпретатором и pyqt5. Не думаю, что пользователь будет заморачиваться и ставить себе дополнительные пакеты и программы. Надеюсь, вы понимаете, что запуск программы на dev-среде и у пользователя это не одно и тоже. Также нужно отметить, что у каждого решения были свои проблемы: один не запускался, другой собирал то, что не смог потом запустить, третий вообще отказывался что-либо делать.
После долгих танцев с бубном и активным гуглением, мне все же удалось собрать проект с помощью pyinstaller, в полностью работоспособное приложение.
Немного о Pyinstaller
Pyinstaller собирает python-приложение и все зависимости в один пакет. Пользователь может запускать приложение без установки интерпретатора python или каких-либо модулей. Pyinstaller поддерживает python 2.7 и python 3.3+ и такие библиотеки как: numpy, PyQt, Django, wxPython и другие.
Pyinstaller тестировался на Windows, Mac OS X и Linux. Как бы там ни было, это не кросс-платформенный компилятор: чтобы сделать приложение под Windows, делай это на Windows; Чтобы сделать приложение под Linux, делай это на Linux и т.д.
PyInstaller успешно используется с AIX, Solaris и FreeBSD, но тестирование не проводилось.
Подробнее о PyInstaller можно почитать здесь: документация.
К тому же после сборки приложение весило всего около 15 мб. Это к слову и является преимуществом pyinstaller, поскольку он не собирает все подряд, а только необходимое. Аналогичные же библиотеки выдавали результат за 200-300 мб.
Приступаем к сборке
Прежде чем приступить к сборке мы должны установить необходимые библиотеки, а именно pywin32 и собственно pyinstaller:
Чтобы убедится, что все нормально установилось, вводим команду:
должна высветиться версия pyinstaller. Если все правильно установилось, идем дальше.
В папке с проектом запускаем cmd и набираем:
Собственно это и есть простейшая команда, которая соберет наш проект.
Синтаксис команды pyinstaller таков:
pyinstaller [options] script [script . ] | specfile
Наиболее часто используемые опции:
—onefile — сборка в один файл, т.е. файлы .dll не пишутся.
—windowed -при запуске приложения, будет появляться консоль.
—noconsole — при запуске приложения, консоль появляться не будет.
—icon=app.ico — добавляем иконку в окно.
—paths — возможность вручную прописать путь к необходимым файлам, если pyinstaller
не может их найти(например: —paths D:\python35\Lib\site-packages\PyQt5\Qt\bin)
PyInstaller анализирует файл myscript.py и делает следующее:
- Пишет файл myscript.spec в той же папке, где находится скрипт.
- Создает папку build в той же папке, где находится скрипт.
- Записывает некоторые логи и рабочие файлы в папку build.
- Создает папку dist в той же папке, где находится скрипт.
- Пишет исполняемый файл в папку dist.
В итоге наша команда будет выглядеть так:
После работы программы вы найдете две папки: dist и build. Собственно в папке dist и находится наше приложение. Впоследствии папку build можно спокойно удалить, она не влияет на работоспособность приложения.
Спасибо за внимание. Надеюсь статья была вам полезна.
Источник
Python-сообщество
Уведомления
#1 Июнь 25, 2013 13:49:32
pyinstaller не работает и не выдаёт ошибок
нужно создать exe-шник для вот этой самописной программки http://rusfolder.com/36990031. Хочу использовать PyInstaller. Пробовал разными способами, всё делаю через консоль винды, скрипты отрабатывают но никаких ошибок не выдаёт. Попробую описать свои действия на простейшем примере:
1. Скачал PyInstaller версии 2, распаковал в папку с питоном версии 2.7 ( знаю что он не является питоновской библиотекой но пусть всё лежит в одном месте )
2.Конфигурирую — выполняю команду E:\Python\Lib\site-packages\PyInstaller> Configure.py — Всё проходит без ошибок.
3. Создаю простейший скрипт для теста
Называю его test.py, кладу его в I:\test\
4. Выполняю команды E:\Python\Lib\site-packages\PyInstaller> Makespec.py -F -w -X d:\test\test.py
E:\Python\Lib\site-packages\PyInstaller> Build.py E:\Python\Lib\site-packages\PyInstaller>\test\test.spec
Иии… ничего. Сообщений об ошибках нет. Папка test по пути E:\Python\Lib\site-packages\PyInstaller не создаётся после первой команды, spec файл тоже. Вторая команда молча прорабатывает без ошибок и ничего.Пробовал создавать вручную папку тест чтобы он туда положил файлик-тоже не помогло.
Что делать чтобы Pyinstaller заработал?
P.s. В моей программе используются следующие модули :
Сможет ли PyInstaller затянуть в себя все эти модули чтобы программа получилась работоспособной?
Пробовал создать exe файл с помощью cx_Freeze, получилось, библиотеки вроде в основном затянул он в себя, но при запуске вот такая вот ошибка :
Отредактировано SoT (Июнь 25, 2013 15:14:15)
Источник
Как исправить ошибку «pyinstaller не является внутренней или внешней командой, исполняемой программой или пакетным файлом»?
UPD: проблема частично решена с помощью добавления # — coding: utf-8 — в первую строчку файла pyinstaller-script.py Компиляция запустилась, однако вышла простыня с ошибками:
.
File «C:\Users\ГЕРЦУНЬКА\AppData\Local\Programs\Python\Python39\lib\site-packages\PyInstaller\building\utils.py», line 632, in strip_paths_in_code
return code_func(co.co_argcount, co.co_kwonlyargcount, co.co_nlocals, co.co_stacksize,
TypeError: an integer is required (got type bytes)
Это последняя строка.
Новая папка создана, но exeшника там нет
Олег Дзен, только что попробовал установить питон с нуля.
1. Поставил питон из магазина винды
2. Переоткрыл консоль
3. Пишу python 3 -m pip install pyinstaller. Вроде установился, но там на что-то ругалось
4. Через команду pyinstaller не запускается
5. Через python3 -m pyinstaller тоже
6. Обновляю pip через python3 -m pip install —upgrade pip
7. Во время обновления pip ругнулся
8. Смотрю что по этому пути лежит — а pyinstaller там.
9. пишу в консоли $env:PATH +=»;» + «тот путь»
10. pyinstaller работает
11. Теперь в свойствах компьютера выставляю PATH на постоянную.
Источник
Не работает pyinstaller?
1\AppData\Local\Temp\tmp9yafqxzn’
cwd: C:\Users\Даниил\AppData\Local\Temp\pip-install-0nda1hub\pyinstaller_
fec1fae201774864af3c8e72ccf5b18c
Complete output (37 lines):
running dist_info
creating C:\Users\Даниил\AppData\Local\Temp\pip-modern-metadata-ye6hh5v3\PyIns
taller.egg-info
writing C:\Users\Даниил\AppData\Local\Temp\pip-modern-metadata-ye6hh5v3\PyInst
aller.egg-info\PKG-INFO
writing dependency_links to C:\Users\Даниил\AppData\Local\Temp\pip-modern-meta
data-ye6hh5v3\PyInstaller.egg-info\dependency_links.txt
writing entry points to C:\Users\Даниил\AppData\Local\Temp\pip-modern-metadata
-ye6hh5v3\PyInstaller.egg-info\entry_points.txt
writing requirements to C:\Users\Даниил\AppData\Local\Temp\pip-modern-metadata
-ye6hh5v3\PyInstaller.egg-info\requires.txt
writing top-level names to C:\Users\Даниил\AppData\Local\Temp\pip-modern-metad
ata-ye6hh5v3\PyInstaller.egg-info\top_level.txt
writing manifest file ‘C:\Users\Даниил\AppData\Local\Temp\pip-modern-metadata-
ye6hh5v3\PyInstaller.egg-info\SOURCES.txt’
adding license file ‘COPYING.txt’ (matched pattern ‘COPYING*’)
reading manifest file ‘C:\Users\Даниил\AppData\Local\Temp\pip-modern-metadata-
ye6hh5v3\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 0xe4 in positio
n 0: invalid continuation byte (sitecustomize.py, line 7)
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-
ye6hh5v3\PyInstaller.egg-info\SOURCES.txt’
creating ‘C:\Users\Даниил\AppData\Local\Temp\pip-modern-metadata-ye6hh5v3\PyIn
staller.dist-info’
error: invalid command ‘bdist_wheel’
—————————————-
WARNING: Discarding https://files.pythonhosted.org/packages/3c/c9/c3f9.
e6a824686deba6129884c8cbdf70e750661773b9865ee0/PyInstaller-3.6.tar.gz#sha256=373
0fa80d088f8bb7084d32480eb87cbb4ddb64123363763cf8f2a1378c1c4b7 (from https://pypi
.org/simple/pyinstaller/) (requires-python:>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3
.3.*, !=3.4.*). Command errored out with exit status 1: ‘c:\users\даниил\appdata\l
ocal\programs\python\python38\python.exe’ ‘c:\users\даниил\appdata\local\programs\
python\python38\lib\site-packages\pip\_vendor\pep517\in_process\_in_process.py’
prepare_metadata_for_build_wheel ‘C:\Users\3939
1\AppData\Local\Temp\tmp9yafqxzn
‘ Check the logs for full command output.
Источник
Что делать, если pyinstaller не может найти динамические или пользовательские библиотеки?
Я пытаюсь использовать pyinstaller для создания одного exe-файла моей программы на Python, но когда процесс завершается, exe-файл не может быть запущен. Изучив вывод консоли из процесса, я вижу следующую строку:
126946 ИНФОРМАЦИЯ: Ищем динамические библиотеки
Я получаю несколько сотен строк «ПРЕДУПРЕЖДЕНИЕ: lib не найдена: api-ms-win-crt- любое количество разных .dll зависимостей пути к месту сохранения dll или pyd
Я установил Python, используя конфигурацию по умолчанию, и всегда устанавливал пакеты Python, используя pip. Предполагается, что Pyinstaller прост и не требует большого количества дополнительных шагов, таких как создание файла setup.py, но, похоже, чего-то не хватает, что говорит pyinstaller, где искать эти недостающие библиотеки. Есть ли обходной путь для этого? Или даже лучший python для exe-компилятора, который я должен использовать?
РЕДАКТИРОВАТЬ: Чтобы предоставить больше информации — Моя программа состоит из 5 модулей, и среди них я использую три сторонних пакета, включая: PyQt5, pandas и ArcGIS. Кроме того, у меня есть два файла sql, которые также являются частью программы. У меня такое ощущение, что pyinstaller может компилировать только простые скрипты и, используя другие пакеты, модули и внешние файлы, он просто создан для такого рода вещей.
3 ответа
Я внес ряд изменений, которые привели к компиляции и правильной работе сборки.
Во-первых, в pyinstaller отсутствует файл «ловушки» для панд, поэтому его необходимо создать вручную. Для меня папка ловушек была расположена здесь: «C: \ Users \ natha \ AppData \ Local \ Programs \ Python \ Python36-32 \ Lib \ site-packages \ PyInstaller \ hooks»
Внутри этой папки я создал файл с именем hook-pandas.py, и единственным содержимым этого файла была одна строка: hiddenimports = [‘pandas._libs.tslibs.timedeltas’]
Я установил Windows 10 SDK, но я не уверен, была ли это только частью проблемы, или на что это повлияло, если что-нибудь. Моя программа была составлена из нескольких модулей, потому что я люблю разделять процессы разных типов в разных файлах. Однако для упрощения я объединил весь свой код в один файл .py и имел только один другой файл, который содержал мой автоматически сгенерированный код графического интерфейса PyQt5 / Qt Designer. Я удалил все импорта, которые читаются как
Я получил ошибки в нескольких сборках, когда казалось, что pyinstaller не распознает эти вещи. Так что я держал вещи очень прямо, как
Наконец, когда я пошел компилировать сборку с помощью команды -p, я добавил два пути к файлам; один указывал на корневой каталог моей программы, где был сохранен другой модуль (модуль PyQt5), а второй путь был на «C: \ Users \ natha \ AppData \ Local \ Programs \ Python \ Python36-32 \ Lib \ сайт -пакеты » . Как только эти вещи будут созданы, компиляция будет завершена в обычном режиме, и сборка будет выполнена идеально. Итак, в итоге, ключи к успеху здесь:
-Убедитесь, что есть файл hook-pandas.py, если в вашем скрипте используется pandas -Обеспечите, чтобы файл hook-pandas.py содержал следующую строку:
-И убедитесь, что команда -p используется для направления pyinstaller туда, где хранятся ваши пользовательские модули и все пакеты python. Моя команда -p читается так:
Обратите внимание на двоеточие, разделяющее два пути.
Я думаю, что это основные вещи для проверки, а второстепенные вещи будут
Введите импорт, чтобы избежать тех.
Забавно, что кто-то задал похожий вопрос
44 минуты назад, но использовал python с excel.
Во всяком случае, надеюсь, что этот ответ здесь работает, и аудитор / модератор не волнуется об этом; p
Я скопировал инструкции из моего рекомендованного решения и использовал ссылку в качестве дополнительной. https://www.youtube.com/watch?v=OZSZHmWSOeM
Py to exe Project
Python: Python 2.7 или Python 3.3+ (в основном все, на чем работает pyinstaller)
Chrome: запустить пользовательский интерфейс
Загрузите заархивированную папку
Откройте cmd / терминал и cd в разархивированную папку (сейчас рекомендуем разместить ее на рабочем столе)
Выполнить pip install -r requirements.txt
Запуск приложения
Запустить run.py . Chrome откроется в режиме приложения с запущенным проектом.
Использование приложения
Выберите местоположение вашего скрипта (вставьте или используйте проводник)
Контур адресного поля станет синим, когда файл существует
Выберите другие параметры и добавьте такие вещи, как значок или другие файлы
Нажмите большую синюю кнопку внизу, чтобы преобразовать
Найдите ваши конвертированные файлы в [unzipped folder] / output, когда закончите
Передача файла с аргументами
В качестве альтернативы вы можете выполнить python run.py [filename] . Это откроет окно с именем файла в месте расположения скрипта.
Вам необходимо установить Windows 10 SDK, а затем обновить путь, чтобы включить dll-файлы ucrt, которые можно найти здесь после установки:
C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist \ ucrt \ DLLs \ x86
Источник