Python // Компиляция exe-программ в cx_freeze
Альтернативным вариантом создания .exe файла является библиотека cx_freeze. Давайте установим её:
Идём сюда:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_freeze
и скачиваем версию whl файла для вашей ОС и для вашей разрядности Python (32/64 бит - то есть win32/amd64)
Ставим wheel который нужен для установки whl файла:
pip install wheel
После этого, кладём скачанный whl файл на диск D: и даём команду
pip install путь-к-файлу-whl-с-полным-именем
например:
pip install D:\cx_Freeze-5.0.2-cp36-cp36m-win_amd64.whl
У вас файл может называться по другому в зависимости от его версии и версии Python которую вы используете (и качать нужно именно соответствующую версию файла)
После установки мы можем создавать .exe файлы. В качестве примера я скомпилирую скрипт из прошлого урока.
Для этого в каталоге со скриптом который вы хотите преобразовать в exe нужно создать файл setup.py со следующим содержанием:
from cx_Freeze import setup, Executable
setup(
name = "DownBlog",
version = "1.0",
description = "Download Blog",
executables = [Executable("downblog.py")]
)
Здесь вместо downblog.py нужно вставить имя вашего скрипта на питоне который вы компилируете.
Перейдя в командной строке в каталог с вашим скриптом, и находясь в данном каталоге дайте команду
python.exe setup.py build
и рядом появится новый каталог build, в котором, среди кучи необходимых для работы библиотек вы обнаружите downblog.exe
Минусом использования cx_freeze является то, что приложение компилируется не в один файл, а в папку, в которой есть куча библиотек, и среди них exe файл. Для работы exe-шника придется тащить с собой всю эту папку с библиотеками. Плюсом использования cx_freeze является то что он справляется с компиляцией сложных проектов, на которых спотыкается pyinstaller
Также необходимо упомянуть про глюки с компиляцией библиотеки requests и прочих некоторых модулей. Если компилятор ругается на отсутствие некоторых модулей в процессе компиляции, или запуска экзешника, попробуйте явно прописать данные модули и их пути в файле настроек компилятора setup.py
В качестве примера вот файл setup.py одного из моих старых проектов test.py где используется requests:
Исходник setup.py:
import requests
import sys
import os
from cx_Freeze import setup, Executable
sys.path.append(os.path.join(sys.path[0],'src'))
executable = Executable(script="test.py")
options = {"build_exe":{'include_files':['C:/Program Files/Python36/Lib/site-packages/requests/','C:/Program Files/Python36/Lib/site-packages/idna']}}
setup(
name="example",
version="0.1",
description="Hello",
requires = ["requests"],
options = options,
executables = [executable]
)