Upload
pynsk
View
42
Download
0
Embed Size (px)
Citation preview
Введение
Рассмотрим:• Распространение приложений написанных на Python
• Создание переносимого Python окружения для любых нужд
Оставим в стороне:• Полностью подконтрольное окружение
• Виртуализацию
• Облака
• Сборку и распространение модулей Python
Распространение приложений написанных на Python
Правильный способ:
Вариант А:• Воспользоваться версией Python от поставщика ОС
• Дополнить ее недостающими модулями в виде пакетов ОС (rpm, deb, etc)
• Запаковать приложение в пакет или коллекцию пакетов
• Создать свой репозиторий для ОС (yum, deb, etc)
Вариант Б:• Собрать нужную версию Python с необходимыми модулями в виде
пакетов ОС (rpm, deb, msi, etc)
• Запаковать приложение в пакет или коллекцию пакетов
• Создать свой репозиторий для ОС (yum, deb, etc)
Распространение приложений написанных на Python
Правильный способ:
Плюсы:• Простота доставки приложения и его обновлений
• Выпуском обновлений безопасности занимается поставщик ОС
Минусы:• Необходимо поддерживать и тестировать приложение на всех
поддерживаемых версиях и архитектурах ОС
• Дополнительные расходы на содержание сборочного окружения
Распространение приложений написанных на Python
Альтернативные решения:
Solution Windows Linux Python 3 LicenseOne-file mode
Zipfile import
Eggspkg_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
Распространение приложений написанных на Python
Альтернативные решения:
Плюсы:• Простота сборки приложения: собрали один раз – используем везде*
Минусы:• Обновления безопасности к используемым библиотекам необходимо
выпускать самостоятельно
• При использовании некоторых решений все еще необходимо создавать дистрибутив приложения самостоятельно
• (Windows) Не все решения упаковывают вместе с приложением Microsoft VC++ Runtime DLLs
Распространение приложений написанных на Python
* Почти везде:
Linux• Во всех решениях динамическое связывание с системными
библиотеками (libc, libpthread, libm, etc) остается, что может потребовать предварительной подготовки системы к использованию приложения (Например, для 32бит приложения доставить 32бит версии libc, libpthread, etc на 64бит систему)
Создание переносимого Python окружения
Windows:1. Берем нужную версию дистрибутива Python с официального сайта
2. Ставим
3. Дополняем необходимыми модулями при помощи pip
4. Подкладываем Microsoft VC++ Runtime DLLs
5. Копируем на “флешку”
Создание переносимого 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