GNU/Linux >> Belajar Linux >  >> Linux

Jadikan skrip Python yang dikombinasikan dengan paket linux mudah diinstal untuk pengguna akhir

Saya pikir titik awal yang baik adalah Dockerfile, di mana Anda mulai dari gambar Ubuntu dan kemudian menginstal dependensi yang Anda inginkan (samtools, bwa) dan juga paket python (ditempatkan di requirements.txt)

  • pip freeze > requirements.txt untuk mendapatkan paket python yang Anda inginkan (numpy, tqdm dll)
  • buat Dockerfile (yang berada di direktori yang sama dengan requirements.txt) misalnya:

    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"]
    
  • bangun gambar buruh pelabuhan Anda docker built --tag repository/imagename . (DOT adalah direktori saat ini)

  • mulai gambar docker run -dti --name test repository/imagename
  • masuk ke wadah untuk mulai bekerja docker attach test
  • seperti yang Anda lihat, saya mengujinya dan di dalam wadah saya memiliki semua alat dan paket yang diinginkan
  • Jika Anda ingin menambahkan alat baru, tambahkan saja di Dockerfile dan jika Anda ingin menambahkan paket python cukup perluas file requirements.txt.

  • Jika Anda memiliki skrip python yang melakukan sesuatu dan Anda perlu memasukkannya ke dalam Docker container , taruh saja di direktori yang sama dengan Dockerfile dan requirements.txt dan perbarui Dockerfile (agar memiliki wadah yang memulai skrip python Anda ), lebih tepatnya di Dockerfile, baris terakhir adalah CMD [ "python", "./my_script.py" ]


Saya tidak akan menginstal perangkat lunak ke beberapa komputer / server karena dapat merusak perangkat lunak lain yang berjalan di sistem itu. Sebagai gantinya, saya akan membuat paket deb dan mengatur dependensi perangkat lunak mana yang harus diinstal untuk memandu pengguna melalui penginstalan.

1. Buat struktur direktori deb
Direktori deb menyimpan skrip/biner akhir untuk paket tersebut. source memiliki kode python Anda.

$ 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. Tambahkan file
Di bawah ini saya telah menambahkan konten dari setiap file. Anda harus dapat menerapkannya sesuai kebutuhan Anda.

./Makefile :File ini bertanggung jawab untuk menghasilkan sumber dan 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 :File kontrol untuk pengelola paket 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 :File tempat Anda dapat menginstal paket python. Dijalankan sebelum instalasi hello-world.py . Sekali lagi, pastikan Anda tidak hanya (kembali) menginstal/memperbarui perpustakaan. Ini dapat menyebabkan masalah ketidakcocokan pada perangkat lunak lain.

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

./source/Makefile :File yang saya gunakan untuk menguji penyiapan ini.

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

3. Pemasangan dan penghapusan Pemasangannya sangat mudah, cukup gunakan dpkg .

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

Fitur yang bagus untuk dimiliki adalah Anda tidak perlu khawatir tentang pembuatan versi perangkat lunak Anda, karena hal itu dilakukan di control mengajukan. Debian memiliki tutorial yang cukup bagus jika Anda tertarik untuk membaca lebih lanjut.

EDIT:
Menambahkan virtualenv untuk contoh. Paket Python harus dipasang di lingkungan virtual, bukan secara global.


Linux
  1. Menemukan Paket untuk Kali Linux

  2. Apa yang saya gunakan di linux untuk membuat program python dapat dieksekusi

  3. Skrip Nohup untuk Python tidak berfungsi saat berjalan di latar belakang dengan &

  1. Aljabar Vektor di Scientific Linux 7.1 dengan Python Script:Bagian 1

  2. Cara menggunakan ekspor dengan Python di Linux

  3. Membuat template dengan Linux dalam Shell Script?

  1. Cara membuat skrip Python berjalan seperti layanan atau daemon di Linux

  2. Simulasikan keystroke di Linux dengan Python

  3. Skrip transliterasi untuk shell linux