Nic*_*las 9 python linux bash installation
我编写了一个使用numpy,multiprocessing,tqdm和其他一些Python库的python脚本。另外,我运行的软件包(例如samtools,bwa,GATK)设置为必须在linux中安装(apt-get install)。
我想以某种方式包装所有这些依赖项,以使最终安装尽可能地对用户友好且稳定。
似乎pip不是一个选项,因为在我的示例中包含了非python软件包。
也许可以使用Docker或创建具有所有这些依赖关系的conda环境,但是我并没有真正了解如何进行管理。
我不愿意将软件安装到某些计算机/服务器上,因为它可能会破坏该系统上运行的其他软件。(尽管您不能省略使用来安装软件包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的教程很好。