Python¶
Приложения Python, использующие поддерживаемые системы сборки, такие как Meson, CMake или Autotools, могут быть созданы стандартным методом. Однако многие приложения Python используют настраиваемые сценарии установки или, как ожидается, будут установлены с помощью Setuptools и pip
.
Для этих случаев flatpak-builder
предоставляет простую систему сборки. Вместо того, чтобы автоматизировать процесс сборки, simple
принимает массив строк build-commands
, которые выполняются последовательно.
Например, следующий YAML упрощает сборку модуля популярных запросов:
name: requests
buildsystem: simple
build-commands:
- pip3 install --prefix=/app --no-deps .
sources:
- type: archive
url: https://files.pythonhosted.org/packages/source/r/requests/requests-2.18.4.tar.gz
sha256: 9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e
Здесь build-commands
- это массив, содержащий команды, необходимые для сборки и установки модуля. Как видно, в этом случае для этого запускается pip
. Здесь важен параметр --prefix=/app
, потому-что в противном случае pip
попытается установить модуль в /usr/
, который смонтирован /usr/
только для чтения внутри песочницы и запись в него окончится неудачно.
Обратите внимание, что параметр --no-deps
используется только в целях примера - поскольку модуль запросов имеет свои собственные зависимости, сборка завершится ошибкой. Если требуется несколько зависимостей, лучше установить их, используя метод, описанный в следующем разделе.
Создание нескольких зависимостей Python¶
Несмотря на то, что приведенный выше пример устанавливается, на самом деле он не работает. Это связано с тем, что у модуля запросов есть ряд зависимостей, которые не были установлены:
certifi
chardet
idna
urllib3
Четырех зависимостей не так много, и их можно установить с помощью простого
метода, описанного выше. Однако что-то более сложное, чем это, быстро станет утомительным.
В этих случаях можно использовать flatpak-pip-generator для генерации необходимого манифеста JSON. Это скрипт Python, который принимает имя пакета и использует pip
для определения его зависимостей, а также их URL-адресов и хэшей архивов.
Использовать flatpak-pip-generator
так же просто, как запустить:
$ python3 flatpak-pip-generator requests
Или если у вас есть файл requirements.txt
, которым вы можете генерировать модули для каждого перечисленного пакета:
$ python3 flatpak-pip-generator --requirements-file=requirements.txt
В результате будет выведен файл с именем python3-requests.json
, содержащий необходимый манифест JSON, который затем можно будет включить в файл манифеста вашего приложения. Даже если ваш манифест использует YAML, вы все равно можете включить JSON следующим образом:
modules:
- python3-requests.json
# (other modules go here)