Друзья резиденции
Реклама
Архивы
Топ-10 страниц Paladinum.ru
Счетчики
Яндекс.Метрика
Индекс цитирования

Когда возникает необходимость предоставить плод своих трудов на Python 3 для широких (или не очень) масс, то, естественно, правильно будет предоставить это в привычном виде для большинства рядовых пользователей — в виде программы с исполняемым файлом *.exe. Я для этого пользуюсь модулем «cz_Freeze», который позволяет хоть как-то это делать в Python 3.

Конечно, подобная компиляция далека от идеала и не всегда получается с первого раза скомпилировать работающий скрипт, чтобы он работал в режиме «для пользователя». Компилируя одну из своих первых программ для «широких масс», я столкнулся со следующей ошибкой при запуске моей скомпилированной программы:

Traceback (most recent call last):
File «C:\Python33\lib\site-packages\cx_Freeze\initscripts\Console.py», line 27, in <module>    exec(code, m.__dict__)
File «PrintQualityDocs_V1_1.py», line 35, in <module>
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 1565, in _find_and_load
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 1532, in _find_and_load_unlocked
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 584, in _check_name_wrapper
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 495, in set_package_wrapper
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 508, in set_loader_wrapper
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 1132, in load_module
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 313, in _call_with_frames_removed
File «_mssql.pyx», line 53, in init _mssql (_mssql.c:21719)
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 1565, in _find_and_load
File «X:\Python33-x32\lib\importlib\_bootstrap.py», line 1529, in _find_and_load_unlocked
ImportError: No module named ‘uuid’

Подобные ошибки (как и все ошибки Python 3) нужно читать, начиная с последней строчки. В указанной проблеме ключевая строчка: «ImportError: No module named ‘uuid’«. Проблему можно решить 2-мя способами.Первый вариант — это в папке «c:\Python33\Lib\» найти файл «uuid.py» и запихнуть его в архив скомпилированной программы — файл «library.zip», который находится в той же папке, что и сам исполняемый файл скомпилированной программы.

Второй вариант (на будущее) — скорректировать скрипт и прописать в нём отсутствующий модуль, чтобы он сразу же подтянулся при компилировании:

import sys
from cx_Freeze import setup, Executable

build_exe_options = {«packages»: [«os», «uuid»]} #Здесь указываем «uuid», и при компиляции этот модуль подтянется автоматически
base = «Console» #Признак консольной программы — наша программа будет запускаться в командном интерпритаторе
setup(  name = «ProgramName», #Здесь можно указать название своей программы

version = «ProgrmaVersion», #Здесь можно указать версию своей программы
description = «ProgramDescription», #Здесь можно указать описание своей программы
options = {«build_exe»: build_exe_options},
executables = [Executable(«FileName.py», base=base)]) #Здесь вместо FileName.py указывается скрипт, который мы компилируем.

Я думаю, если у Вас возникла подобная проблема, то более подробно рассказывать о том, как компилировать с помощью cx_Freeze у меня уже нет необходимости 🙂


Комментарии:

Оставить комментарий