Ошибка при компиляции файла python

Обновлено: 07.07.2024

Код, написанный на Python, позволяет решать много прикладных задач: автоматизация отчетности, алгоритмы поиска, анализа и пр. Однако не у всех потенциальных пользователей может быть установлен сам Python и тем более не все являются экспертами в программировании. Выручить может программа, которая будет отрабатывать написанный вами код без установки библиотек Python и необходимой оболочки. Одним из таких решений может быть компиляция кода Python а файл exe. Дальше простым языком мы постараемся объяснить, как его скомпилировать и какие есть нюансы.

Для начала Вам необходимо скачать компилятор pyinstaller, для чего вам понадобится команда:

Далее ваш код в формате. py необходимо разместить в системную папку Scripts.

Путь к этой папке обычно выглядит так:

Если Вы инсталлировали Python в другое место, соответственно ищите папку там.

Далее приступаем собственно к компиляции, для чего: выделяем путь к папке Scripts в окне браузера, вместо него набираем команду cmd и жмем Enter.

У Вас сразу будет указан верный путь к файлу:

В продолжение строки с директорией файла необходимо набрать команду: pyinstaller Report.py —onefile

Где Report.py – это имя вашего файла, — onefile – означает, что программа будет скомпилирована в единый файл.

Нажимаем Enter. Pyinstaller приступает к сборке программы.

Готовый файл находим в папке dist.

Данный метод компиляции не оптимизирует включение только необходимых библиотек, поэтому нужно быть готовым к тому, что его размер будет занимать достаточно объема. В нашем случае код из 120 строк с библиотекой Pandas и Datetime собран в программу весом почти 220 Mb. Теперь данным файлом может пользоваться любой сотрудник.

Хотелось бы обратить внимание на следующие нюансы: если вы компилируете файл на 64 битной OS Windows 10, то он не запустится на 32 битной OS Windows 7.

Если же файл будет скомпилирован на 32 битной OS Windows 7, то его можно будет запустить как на 32 битных, так и на 64 битных OS Windows 7/10.

Написал простую программу т.к. только приступил к изучению данного языка. При компиляции вылазит такая ошибка “error ascii codec can't encode characters in position 32-38 ordinal not in range (128)” Я уже менял кодировку в меню Формат файла, ничего не помогло. Что это и как избавиться от этой ошибки, чтоб программа нормально откомпилировалась?

Отредактировано Lemonade (Янв. 10, 2017 14:56:59)

Ошибка при компиляции программы в PyScripter

Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Ошибка при компиляции программы в PyScripter

С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Ошибка при компиляции программы в PyScripter

attachment

Прикреплённый файлы:
pythonpic.JPG (45,6 KБ)

Ошибка при компиляции программы в PyScripter

1. В пути к модулю не должно находится ничего кроме латиницы.
2. Имя файла и файлов только латиницей.

Ошибка при компиляции программы в PyScripter

Что вы имеете ввиду? Имя файла, как видно из фото, латиницей. Путь к модулю? Это что, сам файл?
Я выбрал Файл - Новый - Создать модуль, или Файл - Новый - Создать файл - Python скрипт, и так, и так открывается окно, пишу просту программу, только нажимаю кнопку Компиляция, сразу это вылетает.

Ошибка при компиляции программы в PyScripter

Ошибка при компиляции программы в PyScripter

Это ж я пытался создать файл, чтоб компилировался. Ну странно однако, что ж не так. Никто не знает..

Ошибка при компиляции программы в PyScripter

4kpt_IV
А лучше прекратите мучить себя и поставьте PyCharm
Так он мне понравился, т.к легкий, всего 4 мб, а PyCharm 230 мб, зачем зря место на диске занимать.

Отредактировано Lemonade (Янв. 10, 2017 20:34:22)

Ошибка при компиляции программы в PyScripter

Lemonade
PyCharm 230 мб, зачем зря место на диске занимать.

Ну тогда наслаждайтесь глюками.

Lemonade
Это ж я пытался создать файл, чтоб компилировался. Ну странно однако, что ж не так. Никто не знает..

Я ответил уже на вопрос. Никто ничего не добавит. Что значит создать? Он его где создает? В виртуальном параллельном мире? Он создает его по пути, который прописан в настройках. Так вот в этом пути не должно быть русских символов. Куда вы установили сам PyScripter и куда Python, с помощью которого он пытается исполнять файл? Где он создает файл? По какому пути? Проверьте все внимательно. Еще были бока у одной версии PyScripter, что он болезненно реагировал на MIME типы в юникоде.

Модуль py_compile предоставляет функцию для генерации файла байт-кода из исходного файла и другую используемую функцию, когда исходный файл модуля вызывается в качестве сценария.

Хотя он не часто необходим, он может быть полезен, устанавливая модули для общего использования, особенно если у некоторых пользователей может не быть разрешения написать байту-код файлы кэш в справочнике, содержащем исходный код.

exception py_compile. PyCompileError ¶

Исключение при возникновении ошибки при попытке компиляции файла.

py_compile. compile ( file, cfile=None, dfile=None, doraise=False, optimize=-1, invalidation_mode=PycInvalidationMode.TIMESTAMP, quiet=0 ) ¶

Если путь, которым становится cfile (или явно определенный или вычисленный) будет симлинк или необычный файл, то будет поднято FileExistsError . Это должно быть предупреждением, что импорт превратит эти пути в обычные файлы, если разрешено записывать скомпилированные байтами файлы в эти пути. Это побочный эффект импорта с использованием переименования файлов, чтобы поместить на место последний скомпилированный в байтах файл, чтобы предотвратить одновременные проблемы записи файлов.

optimize управляет уровнем оптимизации и передается встроенной функции compile() . По умолчанию для параметра -1 выбирается уровень оптимизации текущего интерпретатора.

Изменено в версии 3.2: Измененный по умолчанию значение cfile, чтобы быть PEP 3147-соответствующим. Предыдущее значение по умолчанию: file + 'c' ( 'o' если была включена оптимизация). Также добавлен параметр optimize.

Изменено в версии 3.4: Изменено код для использования importlib для записи файла байт-код кэш. Это означает, что семантика создания/записи файлов теперь соответствует тому, что делает importlib , например, разрешения, семантика записи и перемещения и т.д. Также добавлена оговорка, что FileExistsError возникает, если cfile является symlink или нерегулярным файлом.

Изменено в версии 3.7.2: Переменная окружения SOURCE_DATE_EPOCH больше не отвергает значение аргумента invalidation_mode и определяет его по умолчанию значение вместо этого.

Изменено в версии 3.8: Добавлен параметр quiet.

Перечисление возможных методов, которые интерпретатор может использовать для определения того, является ли файл байт-кода актуальным для исходного файла. Файл .pyc указывает требуемый режим недействительности в заголовке. Дополнительные сведения о том, как Инвалидация кэша байткода делает файлы Python недействительными во время выполнения, см. в разделе .pyc .

Добавлено в версии 3.7.

Файл .pyc включает метку времени и размер исходного файла, который Python сравнит с метаданными исходного файла во времени выполнения, чтобы определить, должен ли файл .pyc быть восстановлен.

Файл .pyc включает мешанину содержания исходного файла, которое Python сравнит с источником во времени выполнения, чтобы определить, должен ли файл .pyc быть восстановлен.

Как и CHECKED_HASH , файл .pyc включает в себя хэш содержимого исходного файла. Однако во время выполнения программы Python будет предполагать, что файл .pyc обновлен и вообще не проверяет .pyc на соответствие исходному файлу.

Этот выбор полезен, когда .pycs усовершенствованы некоторой системой, внешней к Python как построить система.

py_compile. main ( args=None ) ¶

Скомпилировать несколько исходных файлов. Файлы назвали в args (или на командной строке, если args - None ), собраны, и получающийся байт-код припрятался про запас нормальным способом. Эта функция не выполняет поиск исходных файлов в структуре каталогов; он компилирует только файлы, именованные явно. Если '-' является единственным параметром в args, список файлов берется из стандартного ввода.

Изменено в версии 3.2: Добавлена поддержка '-' .

Когда этим модулем управляют как сценарий, main() - используемый, чтобы собрать все файлы, названные на командной строке. Состояние выхода ненулевое, если один из файлов не удалось скомпилировать.

Модуль compileall Утилиты для компиляции всех исходных файлов Python в дереве каталогов.

Python становиться с каждым годом все популярней особенно у новичков. На самом деле это и понятно? так как синтаксис языка в отличает от других языков программирования, достаточной простой и если немного почитать мануалы и посмотреть ролики на ютубе можно написать простенькую программу. Возможности Python практически безграничные, на нем можно написать все что угодно. Например, в прошлой статье я рассказывал о том как можно создавать программы с графическим интерфейсом. Сегодня же поговорим о том как можно сделать программу которая будет запускаться на любом компьютере с Windows без установленного Python, если проще говоря покажу как можно преобразовать файл .py в .exe.

Если вы только начали изучать Python то следующие статьи будут Вам очень полезны.

Компилируем код Python в файл exe

И так для того чтобы из файла .py сделать .exe необходимо установить специальную библиотеку, с помощью которой можно скомпилировать python скрипт, для этого открываем командную строку и вводим

Py в exe

Если же установка прошла без ошибок, тогда нужно перейти в директорию где у вас храниться файл скрипт командой

Для компиляции вводим следующею команду

Как из py сделать exe

Компилируем код Python в файл exe

Но как мы видим у нас получился не один файл и несколько. Что бы сделать из py всего один файл exe, нужно ввести туже команду но только добавить специальный флаг.

код Python в файл exe быстро и просто

Компилируем код Python в файл exe быстро и просто

Как видите скомпилировать скрипт и сделать из py exe достаточно просто, но есть несколько нюансов.

Если у вас код достаточно большой то готовьтесь к тому что и файл exe будет внушительных размеров, для примера могу сказать что код из 60 строк будет весить 110-120 Mb.

Так же если код скомпилирован в 64 битной ОС то в 32 битной он не пустится. Если код скомпилирован в 32 битной то он будет работать и 64 битной.

Читайте также: