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)