Всем привет! 🦝 Сегодня хотелось бы дополнить мою статью про установку Python на Linux одной важной деталью. Она касается использования PyInstaller. Дополнительно рассмотрим пример использования PyInstaller на проекте White List. 🔗Ссылку на статью про проект White List оставлю ниже.
🌊вВодная часть
В своей недавней статье про установку Python в Astra Linux CE, я не учел одного важного момента.
А именно, добавление к скрипту конфигураций установки параметра --enable-shared, который добавляет общие библиотеки (они же динамические). Эти библиотеки позволяют другим программам использовать Python-интерпретатор. Давайте сегодня попробуем скомпилировать Python из исходников и добавим этот параметр в конфигурацию.
🐍Сборка Python
Снова, но уже в более короткой форме, рассмотри процесс сборки и установки Python в Astra Linux CE. Для начала давайте скачаем Python в заранее выбранную вами директорию
wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz
Распакуем скачанный архив встроенной утилитой
sudo tar xzf Python-3.12.3.tgz
Переходим в распакованную директорию и смотрим её содержимое
Стандартный набор установочных и не сконфигурированных файлов Python. Давайте сконфигурируем установку следующей командой и обязательно добавим параметр --enable-shared.
📌Чтобы не плодить множество питонов у себя в системе, я устанавливаю его в домашнюю директорию
sudo ./configure --enable-optimizations --enable-shared --with-openssl=/<путь_до_библиотек_ssl> --with-openssl-rpath=auto --prefix=$HOME/python3.12
❗️❗️❗️Обратите внимание! Для последующей правильной работы Python, ему требуется указать путь до библиотек openssl. Про установку openssl для Python, я писал в одной из своих статей.
После конфигурации установки можно приступать к сборке
sudo make -j 4
И давайте после сборки снова посмотрим содержимое директории установочных файлов Python
Вот они, эти коварные библиотеки! Давайте теперь установим Python
sudo make install
И если после установки перейти в директорию, куда установился Python, то общие библиотеки будут на своем месте - в папке lib
Python успешно установлен!🎉 Осталось сделать несколько действий для его правильной работы. А именно, добавить путь к интерпретатору в переменные среды.
export PATH=<путь_к_python>/bin:$PATH
И так, как у нас теперь есть ещё общие библиотеки, до них тоже нужно указать путь.
export LD_LIBRARY_PATH=<путь_к_python>/lib:$LD_LIBRARY_PATH
📌Чтобы переменные окружения не слетали после перезапуска сессии терминала, команды экспорта нужно добавить в файл ~/.bashrc
👀Проверяем работоспособность
🗜Пример использования PyInstaller
А теперь давайте попробуем скомпилировать исполняемый файл программы White List, о которой я писал совсем недавно. Для этого давайте клонируем GIT проекта в заранее выбранную вами директорию.
git clone https://github.com/winchik65/white_list
На момент написания статьи, файлов в репозитории всего три.
Далее давайте создадим виртуальное окружение Python прямо в директории проекта. Для этого в терминале переходим директорию проекта white_list и пишем следующую команду:
python3.12 -m venv env
После выполнения этой команды в директории проекта появиться каталог виртуального окружения Python под название env. Теперь давайте активируем это виртуальное окружение:
source <путь_до_директории_проекта>/env/bin/activate
Отлично! Название виртуального окружения в скобочках перед именем пользователя в терминале, означает, что виртуальное окружение активировано.
Далее давайте установим зависимости необходимые для проекта. Все зависимости для проектов написанных на Python принято записывать в файл requirements.txt. Для того, чтобы установить зависимости, вводим следующую команду в терминале, находясь в директории проекта:
pip install -r requirements.txt
В числе зависимостей был как раз и PyInstaller. Давайте проверим, что он установился и работает, по классике, проверим версию.
pyinstaller --version
А теперь давайте попробуем собрать исполняемый файл проекта white_list для Astra Linux CE. Для этого пишем следующую команду в терминале:
pyinstaller --onefile --name whitelist whitelist.py
Пару слов о том, что за параметры тут указаны:
- --onefile: Этот параметр указывает PyInstaller упаковать все файлы в один исполняемый файл;
- --name whitelist: Этот параметр задает имя для исполняемого файла. В данном случае, имя исполняемого файла будет whitelist;
- whitelist.py: Это путь к исходному скрипту на языке Python.
По окончанию процесса сборки в директории проекта появятся ещё две: dist и build.
В директории dist и будет находиться скомпилированный исполняемый файл. Давайте перейдем в эту директорию в терминале и посмотри её содержимое.
Здесь находится только один файл whitelist - это и есть исполняемый файл. Давайте проверим его работоспособность и попробуем зашифровать файл README.md в директории проекта. Для этого пишем команду:
./whitelist -e ../README.md
А теперь расшифруем файл:
./whitelist -d ../README.md
Всё прошло успешно! 🎉 Теперь вы немного узнали о том, как скомпилировать исполняемый файл программы написанной на Python.