GNU/Linux >> Tutoriales Linux >  >> Linux

Haga que el script de Python combinado con paquetes de Linux sea fácil de instalar para el usuario final

Creo que un buen punto de partida será un Dockerfile, en el que comienza desde una imagen de Ubuntu y luego instala las dependencias deseadas (samtools, bwa) y también los paquetes de python (ubicados en un require.txt)

  • pip freeze > requirements.txt para tener los paquetes de python deseados (numpy, tqdm, etc.)
  • cree un Dockerfile (que se encuentra en el mismo directorio que requirements.txt), por ejemplo:

    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"]
    
  • construye tu imagen acoplable docker built --tag repository/imagename . (DOT es el directorio actual)

  • imagen de inicio docker run -dti --name test repository/imagename
  • ingrese en el contenedor para comenzar a trabajar docker attach test
  • como puede ver, lo probé y dentro del contenedor tengo todas las herramientas y paquetes deseados
  • Si desea agregar nuevas herramientas, simplemente agréguelas en el Dockerfile y si desea agregar paquetes de python, simplemente expanda el archivo requirements.txt.

  • Si tiene un script de python que hace algo y necesita incluirlo en el contenedor de Docker, simplemente colóquelo en el mismo directorio con el Dockerfile y los requisitos.txt y actualice el Dockerfile (para tener un contenedor que inicie su script de python ), más precisamente en el Dockerfile la última línea será CMD [ "python", "./my_script.py" ]


No iría tan lejos como para instalar software en alguna computadora/servidor porque podría dañar otro software que se ejecuta en ese sistema. En su lugar, crearía un paquete deb y establecería dependencias sobre qué software debe instalarse para guiar al usuario a través de la instalación.

1. Crear la estructura de directorios deb
El directorio deb contiene scripts/binarios finales para el paquete. source tiene su código 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. Añadir archivos
A continuación, he agregado el contenido de cada archivo. Debería poder implementarlo según sus necesidades.

./Makefile :Este archivo es responsable de generar la fuente y el 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 :El archivo de control para el administrador de paquetes 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 :El archivo en el que puede instalar paquetes de python. Se ejecuta antes de la instalación de hello-world.py . Una vez más, asegúrese de no solo (re)instalar/actualizar una biblioteca. Podría causar problemas de incompatibilidad en otro software.

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

./fuente/Makefile :Un archivo que usé para probar esta configuración.

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

3. Instalación y eliminación La instalación es muy fácil, solo use dpkg .

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

Una buena característica es que no necesita preocuparse por la versión de su software, ya que se hace en el control expediente. Debian tiene un tutorial bastante bueno si está interesado en leer más.

EDITAR:
Añadido virtualenv al ejemplo Los paquetes de Python deben instalarse en un entorno virtual en lugar de globalmente.


Linux
  1. 3 consejos para imprimir con Linux

  2. Álgebra vectorial en Scientific Linux 7.1 con Python Script:Parte 1

  3. ¿Qué uso en Linux para hacer ejecutable un programa de Python?

  4. Cómo usar la exportación con Python en Linux

  5. El script Nohup para Python no funciona cuando se ejecuta en segundo plano con &

bpython:un intérprete sofisticado de Python para Linux

Cómo instalar Setuptools para Python en Linux

Crear un PKGBUILD para hacer paquetes para Arch Linux

MX Linux 17 Una distribución de Linux fácil de usar para novatos

Comando make de Linux con ejemplos

Comando apt Linux con ejemplos