加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用许多perlapp可执行文件分发应用程序,但只分发一个perl

发布时间:2020-12-15 23:33:19 所属栏目:大数据 来源:网络整理
导读:小结问题 我是否只为每个perl脚本使用perlapp –dependent,然后确保在构建期间将perl-static复制到应用程序的bin目录(称为perl)? 背景 我目前正在分发一个包含许多perlapp独立可执行文件的应用程序,这意味着它们每个都包含perl运行时的捆绑副本. 我想在我的
小结问题

我是否只为每个perl脚本使用perlapp –dependent,然后确保在构建期间将perl-static复制到应用程序的bin目录(称为perl)?

背景

我目前正在分发一个包含许多perlapp独立可执行文件的应用程序,这意味着它们每个都包含perl运行时的捆绑副本.

我想在我的应用程序中只分发perl运行时的一个副本,并让每个可执行文件引用我将分发的一个perl运行时.

例如,假设我有10个构成我的应用程序的perl脚本.当我为两个演示脚本中的每一个执行perlapp时,我看到如下所示:

+ ls -l
-rw-r--r--  1 -----  staff   55 Feb  5 21:03 t1.pl
-rw-r--r--  1 -----  staff   62 Feb  5 21:03 t2.pl
+ perlapp --force t1.pl
PerlApp 9.5.1 build 300018
Copyright (C) 1998-2016 ActiveState Software Inc. All rights reserved.
Commercial license for ..................................

Created 't1'
+ perlapp --force t2.pl
PerlApp 9.5.1 build 300018
Copyright (C) 1998-2016 ActiveState Software Inc. All rights reserved.
Commercial license for ..................................

Created 't2'
+ ls -l
-rwxr-xr-x  1 -----  staff  2266356 Feb  5 21:07 t1
-rw-r--r--  1 -----  staff       55 Feb  5 21:03 t1.pl
-rwxr-xr-x  1 -----  staff  2026992 Feb  5 21:07 t2
-rw-r--r--  1 -----  staff       62 Feb  5 21:03 t2.pl

ls -l `which perl`
-rwxr-xr-x  1 root  wheel  1978336 Mar 19  2015 /usr/local/ActivePerl-5.20/bin/perl-static

在上面的输出中,您可以看到两个(我有10个到目前为止)可执行文件中的每一个都是大约2Mib,一个对应于每个perl脚本.在每个捆绑的可执行文件中,都有一个perl运行时.如果我要分发所有这10个,那么分配将超过22MiB.

当应用程序只需要一个perl运行时,强制客户有效地下载perl运行时10次似乎是草率和浪费.显然,分发只是一个文件,但它比它需要的大得多.虽然整个app只是一个perlapp可执行文件,但perl运行时可以方便地捆绑到可执行文件中.但随着时间的推移,特征(即可执行文件)被添加,浪费和邋iness增加.

要做得对,我很确定我必须使用–dependent perlapp命令行选项.当我测试该选项的使用时,我看到捆绑的可执行文件的大小大大减少.删除临时文件夹并执行从属可执行文件后,它看起来像以前捆绑了相同的模块.

这是我的“如何”问题.

Q1(到目前为止最重要)

如果我在我的perlapp命令中添加–dependent选项,那么我是否应该期望perlapp捆绑以前捆绑的所有模块?我认为这里的答案是肯定的,但我希望像Graham Stuart这样的人做出回应.

Q2

是的,我所要做的就是确保执行那些相关的可执行文件时,静态链接的perl是否在PATH中?

Q3(Q2重新进行了补充说明)

perlapp是否捆绑了perl的静态链接版本?我认为它确实如此,但我想确保我做一些相同的事情.

PS

我尝试在ActiveState的pdk论坛上发布主题,但我认为该界面不接受我的帖子,因为它显示我的帖子未发布,不知道如何发布.

如果我使用–dependent选项,那么我看到:

+ perlapp --force --dependent t1.pl
PerlApp 9.5.1 build 300018
Copyright (C) 1998-2016 ActiveState Software Inc. All rights reserved.
Commercial license for ..................................

Created 't1'
+ perlapp --force --dependent t2.pl
PerlApp 9.5.1 build 300018
Copyright (C) 1998-2016 ActiveState Software Inc. All rights reserved.
Commercial license for ..................................

Created 't2'
+ ls -l
-rwxr-xr-x  1 -----  staff  108560 Feb  5 21:07 t1
-rw-r--r--  1 -----  staff      55 Feb  5 21:03 t1.pl
-rwxr-xr-x  1 -----  staff  108608 Feb  5 21:07 t2
-rw-r--r--  1 -----  staff      62 Feb  5 21:03 t2.pl

在上面的输出中,您可以看到文件非常小,以至于它们不可能捆绑perl运行时.如果我分发perl-static和上述10个可执行文件,那么分发将大约为3MiB,节省约19MiB.

当我取消设置PATH时,可执行文件会引发错误,因为找不到perl可执行文件.这就是为什么我认为分发只需要perl运行时在可执行文件的bin目录中.似乎是一个合理的解决方案,但由于我没有写perlapp,我真的不知道真相.我必须依靠别人告诉我“是的,你要做正确的事情,6个月后当你做x时你就不会被咬伤”.

解决方法

不完全是您正在寻找的解决方案,但 Win32::Packer支持该功能.您可以告诉它构成应用程序的脚本集,它将所有脚本打包为一个包含所有依赖项的MSI安装程序和所有脚本的.exe包装器.

目前它只支持Strawberry Perl,但是也不应该太难添加对AS Perl的支持.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读