GNU/Linux >> Linux の 問題 >  >> Linux

Python スクリプトを Linux パッケージと組み合わせて、エンド ユーザーが簡単にインストールできるようにする

Dockerfile が良い出発点になると思います。この Dockerfile では、Ubuntu イメージから開始し、必要な依存関係 (samtools、bwa) と python パッケージ (requirements.txt に配置) をインストールします。

  • pip freeze > requirements.txt 必要な python パッケージ (numpy、tqdm など) を入手する
  • Dockerfile を作成します (requirements.txt と同じディレクトリにあります) 例:

    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"]
    
  • Docker イメージをビルドします docker built --tag repository/imagename . (DOT は現在のディレクトリです)

  • 開始画像 docker run -dti --name test repository/imagename
  • コンテナに入って作業を開始 docker attach test
  • ご覧のとおり、私はそれをテストしました。コンテナー内には、必要なツールとパッケージがすべて含まれています。
  • 新しいツールを追加したい場合は、それらを Dockerfile に追加するだけです。Python パッケージを追加したい場合は、requirements.txt ファイルを展開するだけです。

  • 何かを実行する python スクリプトがあり、それを Docker コンテナーに含める必要がある場合は、それを Dockerfile および requirements.txt と同じディレクトリに配置し、Dockerfile を更新します (python スクリプトを開始するコンテナーを作成するため)。 )、より正確には、Dockerfile の最後の行は CMD [ "python", "./my_script.py" ] になります。


そのシステムで実行されている他のソフトウェアが壊れる可能性があるため、一部のコンピューター/サーバーにソフトウェアをインストールすることはしません。代わりに、deb パッケージを作成し、どのソフトウェアをインストールする必要があるかについて依存関係を設定して、ユーザーのインストールをガイドします。

<強い>1. deb ディレクトリ構造を作成する
ディレクトリ deb パッケージの最終的なスクリプト/バイナリを保持します。 source あなたの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.ファイルを追加
以下に、すべてのファイルの内容を追加しました。必要に応じて実装できるはずです。

./Makefile :このファイルは、ソースと 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 :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 :Python パッケージをインストールできるファイル。 hello-world.py のインストール前に実行されます .繰り返しますが、ライブラリを (再) インストール/更新するだけではないことを確認してください。他のソフトウェアで非互換性の問題が発生する可能性があります。

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

./source/Makefile :この設定をテストするために使用したファイル。

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

<強い>3.インストールと削除 インストールは非常に簡単です。dpkg を使用するだけです .

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

control で行われるため、ソフトウェアのバージョン管理について心配する必要がないという優れた機能があります。 ファイル。もっと読むことに興味があるなら、Debian にはかなり良いチュートリアルがあります。

編集:
virtualenv を追加 例に。 Python パッケージは、グローバルではなく仮想環境にインストールする必要があります。


Linux
  1. Linuxでpythonプログラムを実行可能にするために何を使用しますか

  2. Linux 上の Python で export を使用する方法

  3. Linux で Python を使用してキーストロークをシミュレートする

  1. Linuxで印刷するための3つのヒント

  2. Pythonスクリプトを使用したScientificLinux7.1のベクトル代数:パート1

  3. Kali Linux のパッケージを見つける

  1. Linux で Python スクリプトをサービスまたはデーモンのように実行する方法

  2. Linux シェルの音訳スクリプト

  3. &を使用してバックグラウンドで実行すると、Python スクリプトの Nohup が機能しない