GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Machen Sie Python-Skript in Kombination mit Linux-Paketen für Endbenutzer einfach installierbar

Ich denke, ein guter Ausgangspunkt wird ein Dockerfile sein, in dem Sie von einem Ubuntu-Image starten und dann Ihre gewünschten Abhängigkeiten (samtools, bwa) und auch die Python-Pakete (in einer requirements.txt platziert) installieren

  • pip freeze > requirements.txt um Ihre gewünschten Python-Pakete (numpy, tqdm usw.) zu haben
  • Erstellen Sie eine Docker-Datei (die sich im selben Verzeichnis wie requirements.txt befindet), z. B.:

    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"]
    
  • Erstellen Sie Ihr Docker-Image docker built --tag repository/imagename . (DOT ist das aktuelle Verzeichnis)

  • Startbild docker run -dti --name test repository/imagename
  • Geben Sie den Container ein, um mit der Arbeit zu beginnen docker attach test
  • Wie Sie sehen können, habe ich es getestet und im Container habe ich alle gewünschten Tools und Pakete
  • Wenn Sie neue Tools hinzufügen möchten, fügen Sie sie einfach in der Docker-Datei hinzu, und wenn Sie Python-Pakete hinzufügen möchten, erweitern Sie einfach die Datei requirements.txt.

  • Wenn Sie ein Python-Skript haben, das etwas tut, und Sie es in den Docker-Container aufnehmen müssen, legen Sie es einfach in dasselbe Verzeichnis wie die Docker-Datei und die requirements.txt und aktualisieren Sie die Docker-Datei (um einen Container zu haben, der Ihr Python-Skript startet ), genauer gesagt, im Dockerfile ist die letzte Zeile CMD [ "python", "./my_script.py" ]


Ich würde nicht so weit gehen, Software auf einem Computer / Server zu installieren, da dies andere Software beschädigen könnte, die auf diesem System ausgeführt wird. Stattdessen würde ich ein Deb-Paket erstellen und Abhängigkeiten festlegen, welche Software installiert werden muss, um den Benutzer durch die Installation zu führen.

1. Erstellen Sie die deb-Verzeichnisstruktur
Das Verzeichnis deb enthält endgültige Skripte/Binärdateien für das Paket. source hat Ihren Python-Code.

$ 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. Dateien hinzufügen
Unten habe ich den Inhalt jeder Datei hinzugefügt. Sie sollten in der Lage sein, es an Ihre Bedürfnisse anzupassen.

./Makefile :Diese Datei ist verantwortlich für die Generierung der Quelle und der 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 :Die Steuerdatei für Debians Paketmanager.

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 :Die Datei, in der Sie Python-Pakete installieren können. Es wird vor der Installation von hello-world.py ausgeführt . Stellen Sie erneut sicher, dass Sie eine Bibliothek nicht einfach (neu) installieren/aktualisieren. Dies könnte zu Inkompatibilitätsproblemen in anderer Software führen.

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

./source/Makefile :Eine Datei, mit der ich dieses Setup getestet habe.

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

3. Installation und Entfernung Die Installation ist sehr einfach, verwenden Sie einfach dpkg .

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

Ein nettes Feature ist, dass Sie sich keine Gedanken über die Versionierung Ihrer Software machen müssen, da dies in control erfolgt Datei. Debian hat ein ziemlich gutes Tutorial, wenn Sie daran interessiert sind, mehr zu lesen.

BEARBEITEN:
virtualenv hinzugefügt zum Beispiel. Python-Pakete sollten in einer virtuellen Umgebung statt global installiert werden.


Linux
  1. 3 Tipps zum Drucken mit Linux

  2. Wie man ein Python-Skript wie einen Dienst oder Daemon in Linux laufen lässt

  3. Tastenanschlag in Linux mit Python simulieren

  4. Nohup für Python-Skript funktioniert nicht, wenn es im Hintergrund mit &ausgeführt wird

  5. Templating mit Linux in einem Shell-Skript?

bpython – Ein schicker Python-Interpreter für Linux

So installieren Sie Setuptools für Python unter Linux

Erstellen eines PKGBUILD zum Erstellen von Paketen für Arch Linux

MX Linux 17 Eine benutzerfreundliche Linux-Distribution für Noobs

Linux-make-Befehl mit Beispielen

apt Linux-Befehl mit Beispielen