Je pense qu'un bon point de départ sera un Dockerfile, dans lequel vous partez d'une image Ubuntu, puis installez vos dépendances souhaitées (samtools, bwa) ainsi que les packages python (placés dans un requirements.txt)
pip freeze > requirements.txt
pour avoir vos packages python souhaités (numpy, tqdm etc)-
créer un Dockerfile (qui réside dans le même répertoire que requirements.txt) par exemple :
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"]
-
construisez votre image docker
docker built --tag repository/imagename .
(DOT est le répertoire courant) - image de début
docker run -dti --name test repository/imagename
- entrer dans le conteneur pour commencer à travailler
docker attach test
- comme vous pouvez le voir, je l'ai testé et à l'intérieur du conteneur, j'ai tous les outils et packages souhaités
-
Si vous souhaitez ajouter de nouveaux outils, ajoutez-les simplement dans le Dockerfile et si vous souhaitez ajouter des packages python, développez simplement le fichier requirements.txt.
-
Si vous avez un script python qui fait quelque chose et que vous devez l'inclure dans le conteneur Docker, placez-le simplement dans le même répertoire avec le Dockerfile et requirements.txt et mettez à jour le Dockerfile (afin d'avoir un conteneur qui démarre votre script python ), plus précisément dans le Dockerfile la dernière ligne sera
CMD [ "python", "./my_script.py" ]
Je n'irais pas jusqu'à installer un logiciel sur un ordinateur/serveur car cela pourrait casser d'autres logiciels exécutés sur ce système. Au lieu de cela, je créerais un paquet deb et définirais des dépendances sur lesquelles le logiciel doit être installé pour guider l'utilisateur tout au long de l'installation.
Le répertoire deb
contient les scripts/binaires finaux pour le package. source
a votre code 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
Ci-dessous, j'ai ajouté le contenu de chaque fichier. Vous devriez pouvoir l'implémenter selon vos besoins.
./Makefile :Ce fichier se charge de générer le source et le 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 :Le fichier de contrôle du gestionnaire de paquets de 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 :Le fichier dans lequel vous pouvez installer les packages Python. Il est exécuté avant l'installation de hello-world.py
. Encore une fois, assurez-vous de ne pas simplement (ré)installer/mettre à jour une bibliothèque. Cela pourrait entraîner des problèmes d'incompatibilité avec d'autres logiciels.
#! /bin/bash
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r ./requirements.txt
./source/Makefile :Un fichier que j'ai utilisé pour tester cette configuration.
MYFILE=hello-world.py
all:
@echo "#!/usr/bin/python\n\
print('Hello world!')" > $(MYFILE)
@chmod +x $(MYFILE)
clean:
@rm $(MYFILE)
dpkg
.
dpkg -i hello-world.deb # for installation
dpkg -r hello-world # for removal
Une fonctionnalité intéressante à avoir est que vous n'avez pas à vous soucier de la version de votre logiciel, car cela se fait dans le control
dossier. Debian propose un très bon didacticiel si vous souhaitez en savoir plus.
ÉDITER:
virtualenv
ajouté à l'exemple. Les packages Python doivent être installés dans un environnement virtuel plutôt que globalement.