pymakeself:生成自提取的档案

pymakeself的Python项目详细描述


pymakeself

在大多数操作系统上使用python制作自解压存档。

概述

pymakeself是一个python脚本,它从一个目录生成一个可自提取的tar.gz归档文件。生成的文件显示为python脚本,可以按原样启动。然后,归档文件将自己解压缩到一个临时目录,并运行一个可选的python安装脚本。pymakeself存档还包括用于完整性自验证的sha256校验和。

makeself.py脚本本身仅用于从文件目录创建归档文件。结果的归档文件是一个压缩的(gzip或bzip2)tar归档文件,开头有一个小的python脚本存根。此脚本执行提取文件、运行嵌入式安装脚本和随后清理的所有步骤。用户只需"运行"存档文件即可安装其内容,即python install nice app.py

此代码旨在尽可能便于移植,并应在安装python2.7或更高版本的任何系统上运行。除了python,它不依赖外部实用程序,如tar、gzip、bash等。

安装

sudo pip install pymakeself

用法

pymakeself包安装pymakeself命令。这与运行python-m pymakeself相同,语法如下:

pymakeself [args] content_dir file_name setup_script [script_args]

---开头的参数是可选的。可用选项有:

--help,-h:打印此帮助消息。

--bzip2:使用bzip2而不是gzip以获得更好的压缩效果。

--encrypt,-e:使用在终端上输入的密码对存档内容进行加密,以响应提示(这将不会被回显)。密码提示将重复,以避免用户输入错误。

--遵循:遵循存档目录中的符号链接,即存储指向的文件,而不是链接本身。

--gzip:使用gzip进行压缩(默认设置)

--label text:描述包的任意文本字符串。它将在提取文件时显示。

--nosha256:禁用为存档创建sha256校验和。如果不需要完整性检查,这将加快提取过程。

--password,-p:使用指定的密码加密存档。这是不安全的!许多多用户操作系统为任何用户提供了查看任何其他用户的当前命令行的方法。将明文密码作为命令行的一部分存储在自动化脚本中是一个更大的风险。只要可能,使用非回声,交互式提示输入密码。指定密码意味着--加密。

--quiet,-q:不打印除错误以外的任何消息。

--sshinstall host\u addr:在指定的主机(即root@devbox1)上安装。多重正常。使用scp将安装程序复制到主机,然后使用ssh运行安装程序。

--tools,-t:包括installtools模块。

--version:在stdout上打印版本号,然后立即退出

--xz:使用xz而不是gzip压缩。创建和提取都需要python3.x。

content\u dir是包含要存档的文件的目录的名称。

文件名是要创建的安装程序脚本的名称。

setup_script是从提取的内容目录中执行的一个python脚本,它使用与运行安装程序相同的python解释器运行。如果脚本已经位于内容目录中,则仅指定脚本的名称。否则,请提供脚本的相对或绝对路径,以便可以将其复制到安装程序存档中。特殊值accountutil告诉pymakeself使用unix帐户创建工具(包含在pymakeself包中)作为设置脚本

下面是一个示例,假设用户有一个包映像存储在/home/jane/mysoft中,并希望生成一个名为install_mysoft.py的自解压包,该包将启动最初存储在/home/jane/mysoft

pymakeself.py --label "Jane's Nice Software Package" /home/jane/mysoft install_mysoft setup.py

下面是我创建安装pymakeself发行版的安装程序的方法:

pymakeself --label "PyMakeSelf by Andrew Gillis" pymakeself install_pymakeself setup.py install

使用pymakeself生成的存档文件可以传递以下参数:

--check:通过验证嵌入的SHA256校验和来检查存档的完整性。不提取存档。

--列出:列出存档中的文件。

--extract:将包内容提取到临时目录并退出。

存档的任何后续参数都将作为附加参数传递给嵌入的命令。

示例

创建一个名为install_stuff的安装程序,运行setup.py:

pymakeself /storage/myfiles install_stuff setup.py

创建一个运行accountutil.py工具(pymakeself installtools中的一个模块)作为设置脚本的安装程序,以创建"ajg"用户帐户:

pymakeself ~/ajg_dot_files create_ajg @accountutil \
-c 'Andrew J. Gillis' -i ./ ajg

指定accountutil@accountutil作为安装脚本,告诉pymakeself使用pymakeself包中包含的unix帐户创建工具。

注意accountutil(要安装文件的目录)的-i参数指定了/,而不是ajg\u dotu files。这是因为安装文件总是在存档目录中运行,所以安装目录是当前目录。

pymakeself包也可以导入到python脚本中并用作库。

from pymakeself import makeself

exe_path = makeself.make_package(
    "/home/ajg/stuff", "install_stuff", "setup.py",
    compress="bz2", label="my cool stuff")

要查看有关make_package()运行的文档:pydoc pymakeself.makeself.make_package

项目链接

  • 项目页面:https://github.com/gammazero/pymakeself" rel="nofollow">https://github.com/gammazero/pymakeself
  • 文档:https://github.com/gammazero/pymakeself/wiki" rel="nofollow">https://github.com/gammazero/pymakeself/wiki
  • 许可证:http://www.opensource.org/licenses/mit-license.php" rel="nofollow">http://www.opensource.org/licenses/mit license.php

错误和问题

https://github.com/gammazero/pymakeself/issues

致谢

这个脚本的灵感来源于stephane peter的makeself,并以其为原型。

纯python-aes密码学改编自richard moore的pyaes

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
检查java中两个链表之间的子集   java仅在findViewById()下显示一个ImageButton   在Java Graphics2D中,文本如何在矩形上居中对齐?   java需要一个用于电子表格计算器的正则表达式   ^java中的运算符   java通过一些属性配置文件根据环境动态更改wsdl端点URL   java Ebean/Play框架关系未更新   集合如何将POJO列表转换为Java流中的映射<String,List>?   java为什么JFrame不显示整个图像?   java如何将调用静态导入的泛型方法的结果传递给另一个方法?   迭代器或foreach中的java延迟   需要java socket logback日志接收器   在Java中初始化Map的静态数组   雅加达邮件Java MimeMail:解码后获得额外字符   java为什么这个xmldom解析器不能正确解析rtept、name和cmt标记?   java如何刷新Log4J2中的异步记录器(带中断器)   java使用构建插件pom生成的jar。xml作为同一pom中的依赖项   java基于位置的序列ADT如何在O(1)时间内插入元素?   java ORM实体与DDD实体   Java对象分配