GNU/Linux >> Linux Esercitazione >  >> Linux

Rendi lo script Python combinato con i pacchetti Linux facilmente installabili per l'utente finale

Penso che un buon punto di partenza sia un Dockerfile, in cui si parte da un'immagine Ubuntu e quindi si installano le dipendenze desiderate (samtools, bwa) e anche i pacchetti python (posizionati in un requirements.txt)

  • pip freeze > requirements.txt per avere i pacchetti python desiderati (numpy, tqdm ecc.)
  • creare un Dockerfile (che risiede nella stessa directory di requirements.txt) ad esempio:

    FROM ubuntu:16.04
    
    RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y python && \
    apt-get install -y wget \
    curl \
    bc \
    unzip \
    less \
    bedtools \
    samtools \
    openjdk-8-jdk \
    tabix \
    bwa\
    python-pip\
    software-properties-common && \
    apt-get -y clean  && \
    apt-get -y autoclean  && \
    apt-get -y autoremove
    
    RUN mkdir -p /usr/src/app
    
    WORKDIR /usr/srv/app
    
    COPY . /usr/srv/app
    
    RUN pip install -r requirements.txt
    
    CMD ["/bin/bash"]
    
  • costruisci la tua immagine docker docker built --tag repository/imagename . (DOT è la directory corrente)

  • inizia l'immagine docker run -dti --name test repository/imagename
  • entra nel contenitore per iniziare a lavorare docker attach test
  • come puoi vedere, l'ho testato e all'interno del contenitore ho tutti gli strumenti e i pacchetti desiderati
  • Se vuoi aggiungere nuovi strumenti, aggiungili semplicemente nel Dockerfile e se vuoi aggiungere pacchetti Python, espandi semplicemente il file requirements.txt.

  • Se hai uno script Python che fa qualcosa e devi includerlo nel contenitore Docker, inseriscilo nella stessa directory con Dockerfile e requirements.txt e aggiorna il Dockerfile (in modo da avere un contenitore che avvii il tuo script Python ), più precisamente nel Dockerfile l'ultima riga sarà CMD [ "python", "./my_script.py" ]


Non andrei fino all'installazione di software su alcuni computer/server perché potrebbe interrompere altri software in esecuzione su quel sistema. Invece, creerei un pacchetto deb e imposterei le dipendenze su quale software deve essere installato per guidare l'utente attraverso l'installazione.

1. Crea la struttura della directory deb
La directory deb contiene gli script/binari finali per il pacchetto. source ha il tuo codice Python.

$ cd $HOME/path/to/some/directory
$ mkdir -p ./deb/DEBIAN ./source
$ touch ./Makefile ./source/Makefile ./deb/DEBIAN/{control,preinst} ./source/hello-world.py
$ chmod +x ./deb/DEBIAN/preinst

2. Aggiungi file
Di seguito ho aggiunto il contenuto di ogni file. Dovresti essere in grado di implementarlo in base alle tue esigenze.

./Makefile :Questo file è responsabile della generazione del sorgente e del deb.

PACKAGE         := hello-world

DEB_DIR         := deb
DEB_FILE        := $(PACKAGE).deb

SOURCE_DIR      := source
SOURCE_IN       := $(SOURCE_DIR)/$(PACKAGE).py
SOURCE_OUT      := $(DEB_DIR)/usr/bin/

.PHONY: all clean
all:
        @make -C $(SOURCE_DIR) CROSS_COMPILE=$(CROSS_COMPILE)
        @mkdir -p $(SOURCE_OUT)
        @cp -r $(SOURCE_IN) $(SOURCE_OUT)
        @chmod -R a-s $(DEB_DIR)
        @dpkg-deb --build $(DEB_DIR) $(DEB_FILE)

clean:
        @rm -rf $(DEB_FILE) $(SOURCE_OUT)
        @make -C $(SOURCE_DIR) clean

./deb/DEBIAN/control :Il file di controllo per il gestore pacchetti di Debian.

Package: hello-world
Version: 1
Section: misc
Priority: optional
Architecture: all
Depends: libc6 (>= 2.24), python (>=2.7.13), virtualenv (>=1.11.6)
Maintainer: Your name <[email protected]>
Description: This is a deb package to install an application

./deb/DEBIAN/preinst :il file in cui è possibile installare i pacchetti Python. Viene eseguito prima dell'installazione di hello-world.py . Ancora una volta, assicurati di non (re)installare/aggiornare semplicemente una libreria. Potrebbe causare problemi di incompatibilità in altri software.

#! /bin/bash
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r ./requirements.txt

./source/Makefile :Un file che ho usato per testare questa configurazione.

MYFILE=hello-world.py
all:
        @echo "#!/usr/bin/python\n\
        print('Hello world!')" > $(MYFILE)
        @chmod +x $(MYFILE)
clean:
        @rm $(MYFILE)

3. Installazione e rimozione L'installazione è molto semplice, basta usare dpkg .

dpkg -i hello-world.deb # for installation
dpkg -r hello-world     # for removal

Una bella caratteristica da avere è che non devi preoccuparti di controllare la versione del tuo software, poiché è fatto nel control file. Debian ha un buon tutorial se sei interessato a leggere di più.

MODIFICARE:
Aggiunto virtualenv ad esempio. I pacchetti Python dovrebbero essere installati in un ambiente virtuale invece che globalmente.


Linux
  1. Trovare pacchetti per Kali Linux

  2. Cosa uso su Linux per rendere eseguibile un programma Python

  3. Come utilizzare l'esportazione con Python su Linux

  4. Come far funzionare uno script Python come un servizio o un demone in Linux

  5. Lo script Nohup per Python non funziona durante l'esecuzione in background con &

bpython – Un fantastico interprete Python per Linux

Come installare Setuptools per Python su Linux

Creazione di un PKGBUILD per creare pacchetti per Arch Linux

MX Linux 17 Una distribuzione Linux facile da usare per i noob

Linux make Command con esempi

apt comando Linux con esempi