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.