В докладе мы рассмотрим создание переносимого дистрибутива Python для любых нужд и операционных систем (Windows & Linux). Познакомимся с существующими и альтернативными решениями. Сравним их достоинства и недостатки.
Докладчик: Григорий Кареев (Odin)
Видео: https://www.youtube.com/watch?v=fvBJG_IKvaQ
2. Введение
Рассмотрим:
• Распространение приложений написанных на Python
• Создание переносимого Python окружения для любых нужд
Оставим в стороне:
• Полностью подконтрольное окружение
• Виртуализацию
• Облака
• Сборку и распространение модулей Python
3. Распространение приложений написанных на Python
Правильный способ:
Вариант А:
• Воспользоваться версией Python от поставщика ОС
• Дополнить ее недостающими модулями в виде пакетов ОС (rpm, deb, etc)
• Запаковать приложение в пакет или коллекцию пакетов
• Создать свой репозиторий для ОС (yum, deb, etc)
Вариант Б:
• Собрать нужную версию Python с необходимыми модулями в виде
пакетов ОС (rpm, deb, msi, etc)
• Запаковать приложение в пакет или коллекцию пакетов
• Создать свой репозиторий для ОС (yum, deb, etc)
4. Распространение приложений написанных на Python
Правильный способ:
Плюсы:
• Простота доставки приложения и его обновлений
• Выпуском обновлений безопасности занимается поставщик ОС
Минусы:
• Необходимо поддерживать и тестировать приложение на всех
поддерживаемых версиях и архитектурах ОС
• Дополнительные расходы на содержание сборочного окружения
5. Распространение приложений написанных на Python
Альтернативные решения:
Solution Windows Linux Python 3 License
One-file
mode
Zipfile
import
Eggs
pkg_resources
support
bbFreeze yes yes no MIT no yes yes yes
py2exe yes no yes MIT yes yes no no
pyInstaller yes yes yes GPL yes no yes no
cx_Freeze yes yes yes PSF no yes yes no
pynsist yes no yes MIT no yes yes yes
Nuitka yes yes yes Apache no yes yes yes
6. Распространение приложений написанных на Python
Альтернативные решения:
Плюсы:
• Простота сборки приложения: собрали один раз – используем везде*
Минусы:
• Обновления безопасности к используемым библиотекам необходимо
выпускать самостоятельно
• При использовании некоторых решений все еще необходимо создавать
дистрибутив приложения самостоятельно
• (Windows) Не все решения упаковывают вместе с приложением Microsoft
VC++ Runtime DLLs
7. Распространение приложений написанных на Python
* Почти везде:
Linux
• Во всех решениях динамическое связывание с системными
библиотеками (libc, libpthread, libm, etc) остается, что может потребовать
предварительной подготовки системы к использованию приложения
(Например, для 32бит приложения доставить 32бит версии libc,
libpthread, etc на 64бит систему)
8. Создание переносимого Python окружения
Windows:
1. Берем нужную версию дистрибутива Python с официального сайта
2. Ставим
3. Дополняем необходимыми модулями при помощи pip
4. Подкладываем Microsoft VC++ Runtime DLLs
5. Копируем на “флешку”
9. Создание переносимого Python окружения
Linux:
1. Берем CentOS 5 i386
2. Берем исходники Python нужной версии
3. Собираем с альтернативным префиксом пути:
> ./configure --prefix=/opt/pythonNN
4. Дополняем необходимыми модулями при помощи pip (придется
“поиграться” с LD_LIBRARY_PATH)
5. Копируем абсолютно все динамические библиотеки необходимые как
самому Python интерпретатору так и его двоичным модулям (включая
динамический загрузчик /lib/ld-linux.so.2) в каталог /opt/pythonNN/lib
6. Копируем на “флешку”
7. Используем:
> /opt/pythonNN/lib/ld-linux.so.2 --library-path /opt/python27/lib /opt/pythonNN/bin/python