xar打包工具链。

xar的Python项目详细描述


<

circleci statuscode style:blackdownloads

xar允许您将许多文件打包成一个独立的可执行文件。 这样便于分发和安装。

一个.xar文件是一个只读的文件系统映像,它在安装时看起来像 用户空间程序的常规目录。这需要一次性的 为此文件系统安装驱动程序 (squashfs)。

xar发音像"沙皇"(/t 642;ar/)。xar中的"x"应该是 Facebook上所有其他信件的占位符此格式最初是 设计用于替换基于zip的par(python存档)、jsar(javascript存档)。 LAR(Lua存档),等等。

用例

xar文件有两个主要用例。首先是简单的收集 在文件系统中的某个位置自动原子挂载的许多文件。 使用xar文件可以极大地缩小它所保存数据的磁盘大小。 压缩到原始大小的20%以下并非闻所未闻。这样可以节省 每台计算机多GB,减少随机磁盘IO。尤其是 在配备闪存的机器上非常重要。

第二个用例是第一个用例的扩展——通过使xar文件 可执行并使用xarexechelper,xar将成为一个自包含的 可执行代码及其数据包。一个流行的例子是python 包括所有python源代码文件以及 本机共享库、配置文件和其他数据。

这可以用速度更快的系统替换virtualenvs和pex文件。 更少的开销,更兼容,实现更好的压缩。 缺点是需要setuid助手来执行安装。

xar对于python使用的优势

  • 对于python来说,squashfs看起来像是磁盘上的常规文件。这样它就可以正常使用 cpython更支持的导入。

  • 在应用程序中,Squashfs看起来也是常规文件。你不需要 使用pkg_resources或其他技巧访问包中的数据文件。

  • 与ZIP相比,使用zStandard压缩的Squashfs还节省了磁盘空间 文件

  • Squashfs不需要将文件解包到临时位置,如 压缩文件可以。

  • squashfs的启动速度比解压缩zip文件快。你只需要 装载文件系统一次。对应用程序的后续调用将重用 现有支座。

  • squashfs只解压缩应用程序使用的页面,并且 解压缩的页面缓存在页面缓存中。

  • squashfs是只读的,因此可以保证应用程序的完整性 与使用virtualenvs或解压缩到临时目录相比。

基准

优化性能(空间和执行时间)是 小精灵。我们使用开源工具运行基准测试来比较PEX、XAR和 本机安装基于以下指标:

  • 大小:可执行文件的大小(字节)
  • 冷启动时间:没有安装或提取任何内容时所用的时间
  • 热启动时间:提取缓存或装入xar squashfs所用的时间

pex是用python3 setup.py bdist_pex--bdist all和xars构建的 使用python3 setup.py bdist\u xar--xar compression algorithm=zstd构建 <表><广告>控制台脚本大小冷启动时间 热启动时间 < /广告><正文>Django管理员(本地)22851072乙 -0.220秒django admin.pex8529089乙1.705秒0.772秒django admin.xar5464064亿英镑(-36%)0.141秒(-92%)0.122秒(-84%)黑色(本机)1020928乙 -0.245秒黑色.pex677550桶0.737秒0.619秒黑色.xar307200桶(-55%)0.245秒(-67%)0.219秒(-65%)Jupyter(本地)64197120 B -0.399秒jupyter.pex17315669 b2.152秒1.046秒jupyter.xar17530880桶(+1%)0.213秒(-90%)0.181秒(-83%)

结果表明,文件大小(使用zstd compressionzstd compression)和启动时间 使用xars改进。当运送到大量 服务器,尤指短时间运行的可执行文件,如小数据 Web服务器或交互式命令行工具上的收集脚本。

要求

xar要求:

xar的组分

b列表x或

这是一个setuptools插件,允许您打包python应用程序 作为.xar文件。它需要squashfs工具。从pypi安装 稳定版本:

pip install xar

或者您可以从这个存储库安装它:

python setup.py install

安装后,使用控制台脚本转到您最喜欢的python项目,然后 运行:

python setup.py bdist_xar

setuptools扩展名bdist\u xar具有配置xar的选项,大多数 重要的是,解释器设置所使用的python解释器。跑 python setup.py bdist\u xar--help获取完整的选项列表。

Xarexec_保险丝

这是用C++编写的一个二进制文件,用来安装一个SUBASFS图像。 它需要安装SquashFuse。注意电流squashfusepackage 在ubuntu上不包括squashfuse ll,所以您必须从 源代码

您可以使用:

mkdir build && cd build && cmake .. && make && [sudo] make install

示例

b列表x或

只需运行:

python /path/to/black/setup.py bdist_xar [--xar-compression-algorithm=zstd]
/path/to/black/dist/black.xar --help

使xar

xar提供了一个简单的cli来从python可执行文件或目录创建xar。 我们可以从现有的python可执行zip文件(如pex)创建xar。

make_xar --python black.pex --output black.xar

您还可以从目录创建一个xar,并告诉xar哪个可执行文件 一开始就跑。

> mkdir myxar
> echo -n "#\!/bin/sh\nshift\necho \$@" > myxar/echo
> chmod +x myxar/echo
> make_xar --raw myxar --raw-executable echo --output echo
> ./echo hello world
hello world

xarexec_fuse将使用xar路径作为 第一个参数,之后将转发xars参数。

在本地运行Circle CI测试

< PrS你需要安装Docker(和可能的Docker机器),因为它是 运行代码。那么你需要 安装并运行circlecicli
circleci build

如果您更改了.circleci/config.yml,则应在提交之前对其进行验证

circleci config validate

贡献

有关如何提供帮助的信息,请参见贡献文件。

许可证

xar获得bsd许可。

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

推荐PyPI第三方库


热门话题
java检查时间更长   从文件中只读取一些字符串并将其存储在java的堆栈中   java变量引用与避免空指针的重复get调用   java将xml数据转换为字符串   java在if语句中对字符串中的表达式求值   java找不到符号IllegalArgumentException   java将servlet的返回值从JSP转换为JSON   在eclipse中运行java应用程序与直接运行它有何不同?   如何在java中创建用作密码的随机字符串   java Mojo Codehaus属性插件替代方案   关于Hibernate中Clob对象的java问题   java如何使用websocket范围测试组件?   java在mongodb中将mapreduce查询转换为聚合   EclipseJava远程调试:如何确保项目中的代码与JVM中运行的代码相同?   java初学者Android:ListView影响下一个类   Java swing BasicTextFieldUI绘制问题   当我在操作栏上添加溢出菜单时,java 安卓 Action Up按钮不起作用   java如何将只包含标题(无行)的数据集写入hdfs位置(csv格式),以便在下载时包含标题?