GNU/Linux >> Znalost Linux >  >> Linux

Zajistěte snadnou instalaci skriptu Python kombinovaného s linuxovými balíčky pro koncového uživatele

Myslím, že dobrým výchozím bodem bude Dockerfile, ve kterém začnete z obrazu Ubuntu a poté nainstalujete požadované závislosti (samtools, bwa) a také balíčky python (umístěné v souboru requirements.txt)

  • pip freeze > requirements.txt abyste měli požadované balíčky python (numpy, tqdm atd.)
  • vytvořte Dockerfile (který je umístěn ve stejném adresáři jako requirements.txt), např.:

    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"]
    
  • vytvořte si obrázek dockeru docker built --tag repository/imagename . (DOT je aktuální adresář)

  • počáteční obrázek docker run -dti --name test repository/imagename
  • zadejte do kontejneru a začněte pracovat docker attach test
  • jak vidíte, vyzkoušel jsem to a uvnitř kontejneru mám všechny požadované nástroje a balíčky
  • Pokud chcete přidat nové nástroje, přidejte je do souboru Dockerfile a pokud chcete přidat balíčky python, rozbalte soubor requirements.txt.

  • Pokud máte skript python, který něco dělá, a potřebujete jej zahrnout do kontejneru Docker , stačí jej umístit do stejného adresáře jako soubor Dockerfile a requirements.txt a aktualizovat soubor Dockerfile (abyste měli kontejner, který spustí váš skript python ), přesněji v Dockerfile bude poslední řádek CMD [ "python", "./my_script.py" ]


Nešel bych tak daleko, že bych instaloval software na nějaký počítač/server, protože by to mohlo poškodit jiný software běžící na tomto systému. Místo toho bych vytvořil deb balíček a nastavil závislosti na tom, který software musí být nainstalován, aby uživatele provedl instalací.

1. Vytvořte adresářovou strukturu deb
Adresář deb obsahuje konečné skripty/binární soubory pro balíček. source má váš kód pythonu.

$ 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. Přidat soubory
Níže jsem přidal obsah každého souboru. Měli byste být schopni jej implementovat podle svých potřeb.

./Makefile :Tento soubor je zodpovědný za generování zdroje a 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 :Kontrolní soubor pro správce balíčků Debianu.

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 :Soubor, do kterého můžete nainstalovat balíčky pythonu. Spouští se před instalací hello-world.py . Opět se ujistěte, že knihovnu pouze (re)instalujete/neaktualizujete. Mohlo by to způsobit problémy s nekompatibilitou v jiném softwaru.

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

./source/Makefile :Soubor, který jsem použil k testování tohoto nastavení.

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

3. Instalace a odstranění Instalace je velmi snadná, stačí použít dpkg .

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

Příjemnou funkcí je, že se nemusíte starat o verzování softwaru, protože se to provádí v control soubor. Debian má docela dobrý tutoriál, pokud si chcete přečíst více.

UPRAVIT:
Přidáno virtualenv k příkladu. Balíčky Pythonu by měly být instalovány ve virtuálním prostředí, nikoli globálně.


Linux
  1. Vektorová algebra na Scientific Linux 7.1 s Python Script:Část 1

  2. Skript Nohup pro Python nefunguje, když běží na pozadí s &

  3. Šablony s Linuxem ve skriptu Shell?

  1. Hledání balíčků pro Kali Linux

  2. Co používám na linuxu k vytvoření spustitelného programu python

  3. Jak používat export s Pythonem na Linuxu

  1. Jak zajistit, aby skript Python běžel jako služba nebo démon v Linuxu

  2. Simulujte úhoz v Linuxu pomocí Pythonu

  3. Transliterační skript pro linuxové prostředí