Python🔗
Aplicativos em Python que usam sistemas de compilação suportados, como Meson, CMake ou Autotools, podem ser criados usando o método padrão. No entanto, muitos aplicativos Python usam scripts de instalação personalizados ou espera-se que sejam instalados através do Setuptools e do pip.
Nesses casos, o flatpak-builder fornece o sistema de compilação simple. Em vez de automatizar o processo de compilação, simple aceita um conjunto de strings build-commands, que são executados em sequência.
Por exemplo, o seguinte YAML simplifica bastante a construção do módulo de solicitações populares:
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
Aqui, build-commands é um vetor que contém os comandos necessários para compilar e instalar o módulo. Como pode-se ver, neste caso, pip é executado para fazer isso. Aqui, a opção --prefix=/app é importante, porque, caso contrário, pip tentaria instalar o módulo em /usr/ o que, por causa do /usr/ estar montado como somente leitura dentro do sandbox, falharia.
Observe que --no-deps é usado apenas para a finalidade do exemplo – como o módulo requisições tem suas próprias dependências, a compilação falhará. Se várias dependências forem necessárias, é melhor instalá-las usando o método na seção seguinte.
Compilando várias dependências Python🔗
Mesmo que o exemplo acima seja instalado, ele não funcionará. Isso ocorre porque o módulo requests possui várias dependências que não foram instaladas:
certifi
chardet
idna
urllib3
Quatro dependências não são muitas e podem ser instaladas usando o método simple descrito acima. No entanto, qualquer coisa mais complexa do que isso rapidamente se tornaria tediosa.
Nesses casos, flatpak-pip-generator pode ser usado para gerar o manifesto JSON necessário. Este é um script Python que pega um nome de pacote e usa pip para identificar suas dependências, junto com seus URLs e hashes tarball.
Usar flatpak-pip-generator é tão simples quanto executar:
$ python3 flatpak-pip-generator requests
Ou se você tem um arquivo requirements.txt você pode gerar módulos para cada pacote listado:
$ python3 flatpak-pip-generator --requirements-file=requirements.txt
Isso produzirá um arquivo chamado python3-requests.json, contendo o manifesto JSON necessário, que pode ser incluído no arquivo de manifesto do seu aplicativo. Mesmo que seu manifesto use YAML, você ainda pode incluir JSON assim:
modules:
- python3-requests.json
# (other modules go here)