GNU/Linux >> Linux Esercitazione >  >> Linux

Come impacchettare applicazioni Python per Linux

Un modo per rendere le applicazioni Python installabili su sistemi operativi basati su Debian (come Debian o OS elementare) è usare lo strumento dh_virtualenv. Crea un .deb pacchetto che avvolge un ambiente virtuale Python attorno a un'applicazione e la distribuisce al momento dell'installazione.

In questo articolo spiegherò come utilizzarlo con l'esempio della creazione di un pacchetto contenente lo strumento HTTPie per testare le API HTTP dalla riga di comando senza dover attivare un ambiente virtuale.

Imballaggio con dh_virtualenv

Innanzitutto, devi installare gli strumenti necessari a dh_virtualenv. La documentazione di dh_virtualenv fornisce tutte le opzioni di installazione. Sul mio sistema basato su Debian, ho inserito:

apt-get install dh-virtualenv devscripts

Sebbene il pacchetto devscripts non sia richiesto, semplificherà l'esecuzione delle operazioni successive.

Ora, crea una directory per mantenere i sorgenti. Poiché si tratta di un pacchetto locale, non ufficiale, di HTTPie, l'ho chiamato myhttp . Quindi, creiamo alcuni file all'interno di myhttp per fornire metadati al sistema di build Debian.

Innanzitutto, crea debian/control file:

Source: myhttp
Section: python
Priority: extra
Maintainer: Jan Doe <[email protected]>
Build-Depends: debhelper (>= 9), python3.7, dh-virtualenv (>= 0.8)
Standards-Version: 3.9.5

Package: myhttp
Architecture: any
Pre-Depends: dpkg (>= 1.16.1), python3.7, ${misc:Pre-Depends}
Depends: ${misc:Depends}
Description: http client
 Useful for doing stuff

Allora, di cosa tratta tutte queste informazioni? Come dice la documentazione Debian:

"Le righe 1–7 sono le informazioni di controllo per il pacchetto sorgente. Le righe 9–13 sono le informazioni di controllo per il pacchetto binario."

Ecco la mia opinione:

  • la sezione il valore è per lo più privo di significato per il nostro caso, ma deve esserci. È utile fornire informazioni al programma di installazione guidato dell'interfaccia utente, che non è rilevante per questo pacchetto.
  • L'extra Priorità il valore è la giusta priorità per i pacchetti di terze parti come questo.
  • Si consiglia vivamente di inserire i dettagli di contatto reali nel Manutentore campo. Tuttavia, non deve essere la tua e-mail personale -- "Team Infrastruttura ", ad esempio, se il pacchetto è gestito dal team e desideri risolvere i problemi essere inviato all'alias di posta del team.
  • Il build-dipende campo indica che hai bisogno di debhelper, python e dh-virtualenv per compilare il pacchetto:il processo di compilazione del pacchetto assicurerà che tali dipendenze siano installate al momento della compilazione del pacchetto.
  • La versione standard è principalmente per il consumo umano. Indica quale guida stai seguendo. Questa guida si basa sulla documentazione ufficiale di dh-virtualenv, che si basa sulla guida 3.9.5 di Debian. È quasi sempre la scelta migliore dare lo stesso nome al pacchetto binario e al pacchetto sorgente.
  • L'architettura il campo deve essere Qualsiasi perché un ambiente virtuale potrebbe includere alcuni file specifici dell'architettura:in caso contrario, il campo sarebbe meglio scelto come tutti .
  • Mantieni le pre-dipendenze list as-is:pre-depends è una forma piuttosto rigida di dipendenze ed è raro che tu abbia bisogno di qualcosa di più del minimo suggerito qui. Le dipendenze vengono solitamente calcolate accuratamente dal sistema di compilazione, quindi non c'è motivo di specificarle manualmente.
  • Se il tuo pacchetto è principalmente per uso interno, allora la Descrizione potrebbe specificare solo informazioni minime e un collegamento al wiki aziendale; in caso contrario, potrebbero essere utili maggiori dettagli.

Quindi crea debian/compat file, che esiste principalmente per scopi storici:

$ echo "9" > debian/compat

Quindi, crea il log delle modifiche per dire agli utenti del pacchetto cosa è cambiato dall'ultima versione. Il modo più semplice è utilizzare dch --create per creare un modello e quindi inserire i valori.

Completato, appare come:

myhttp (2.0.0-1) stable; urgency=medium

  * Initial release.

 -- Jan Doe <[email protected]>  Fri, 27 Mar 2020 01:09:22 +0000

Ora devi dire allo strumento di installare HTTPie, ma quale versione?

Crea un requisiti.in file con versioni sciolte:

httpie

In generale, il file dei requisiti sciolti conterrà solo le dipendenze dirette del progetto e specificherà le versioni minime, se necessario. Non è sempre necessario specificare le versioni minime:gli strumenti sono generalmente orientati a rafforzare le dipendenze verso "l'ultima versione possibile". Nel caso in cui il tuo pacchetto Debian corrisponda a un pacchetto Python interno, un caso comune nelle applicazioni interne, il file dei requisiti sciolto sarà simile:solo una riga con il nome del pacchetto.

Quindi usa pip-compila (disponibile installando il pacchetto PyPI pip-tools ):

$ pip-compile requirements.in > requirements.txt

Questo produrrà un file di dipendenza rigoroso chiamato requirements.txt :

#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile requirements.in
#
certifi==2019.11.28       # via requests
chardet==3.0.4            # via requests
httpie==2.0.0             # via -r requirements.in
idna==2.9                 # via requests
pygments==2.6.1           # via httpie
requests==2.23.0          # via httpie
urllib3==1.25.8           # via requests

Infine, scrivi un debian/rules file per la creazione del pacchetto. Poiché dh_virtualenv fa tutto il duro lavoro, il file delle regole è semplice:

#!/usr/bin/make -f

%:
        dh $@ --with python-virtualenv --python /usr/bin/python3.7

Assicurati di specificare l'interprete Python. Per impostazione predefinita, utilizzerà l'interprete in /usr/bin/python , che è Python 2, ma dovresti usare una versione supportata di Python.

La scrittura è finita; non resta che compilare il pacchetto:

$ debuild -b -us -uc

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Questo produrrà un file nella directory principale con un nome come myhttp_2.0.0-1_amd64.deb . Questo file può essere installato su qualsiasi sistema operativo compatibile.

In generale, è meglio creare pacchetti Debian destinati a una piattaforma specifica, come Debian 10.0, sulla stessa piattaforma.

Puoi archiviare questo pacchetto Debian in un repository e installarlo su tutti i sistemi pertinenti con, ad esempio, Ansible.

Conclusione

Il packaging delle applicazioni per i sistemi operativi basati su Debian è un processo in più fasi. L'uso di dh_virtualenv renderà il processo semplice.


Linux
  1. Come installare Python su Linux

  2. Come creare una directory condivisa per tutti gli utenti in Linux

  3. Come creare un pacchetto RPM Linux

  4. Come creare un servizio Systemd in Linux

  5. Come creare un file di scambio in Linux

Come creare collegamenti su desktop Linux

Come creare alias SSH in Linux

Come creare un alias in Linux

Come installare Setuptools per Python su Linux

Come creare un pacchetto per l'account cPanel?

Come creare un controller di dominio su Linux per AD