使Python脚本与linux软件包结合起来易于最终用户安装

Nic*_*las 9 python linux bash installation

我编写了一个使用numpy,multiprocessing,tqdm和其他一些Python库的python脚本。另外,我运行的软件包(例如samtools,bwa,GATK)设置为必须在linux中安装(apt-get install)。

我想以某种方式包装所有这些依赖项,以使最终安装尽可能地对用户友好且稳定。

似乎pip不是一个选项,因为在我的示例中包含了非python软件包。

也许可以使用Docker或创建具有所有这些依赖关系的conda环境,但是我并没有真正了解如何进行管理。

Bay*_*you 7

我不愿意将软件安装到某些计算机/服务器上,因为它可能会破坏该系统上运行的其他软件。(尽管您不能省略使用来安装软件包pip)。相反,我将创建一个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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

./deb/DEBIAN/control:Debian软件包管理器的控制文件。

Package: hello-world
Version: 1
Section: misc
Priority: optional
Architecture: all
Depends: libc6 (>= 2.24), python (>=2.7.13)
Maintainer: Your name <your-name@domain.org>
Description: This is a deb package to install an application
Run Code Online (Sandbox Code Playgroud)

./deb/DEBIAN/preinst:可以在其中安装python软件包的文件。它在安装之前运行hello-world.py。同样,请确保您不只是(重新)安装/更新库。这可能会导致其他软件不兼容的问题。

#! /bin/bash
echo "pip install something"
Run Code Online (Sandbox Code Playgroud)

./source/Makefile:我用来测试此设置的文件。

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

3.安装和拆卸 安装非常简单,只需使用即可dpkg

dpkg -i hello-world.deb # for installation
dpkg -r hello-world     # for removal
Run Code Online (Sandbox Code Playgroud)

一个不错的功能是您不必担心软件版本控制,因为它已经在control文件中完成了。如果您有兴趣阅读更多内容,Debian的教程很好。