将perl脚本与其依赖项捆绑在一起?

时间:2015-02-25 10:39:00

标签: perl packaging

我有一个perl脚本,我把它放在一起做一些监视和绘图。

它在我的开发系统上很好用,我可以从CPAN安装我自己的模块。

我正在做的是捆绑它以部署到另一个系统上。但是这里有一个问题 - 这个其他系统是“独立的”并且没有网络连接。 (我已经更改了控制文件,以填写,表明我正在安装什么)。

结果,我真的想要一个很容易理解的方法:   - 我的脚本正在使用哪些模块。 (包括依赖项)   - 如何轻松抓住它们(可能cpan get)   - 有一种简单的方法可以告诉我正在使用的外部二进制文件吗? (我肯定使用sshrrdtool - 前者肯定是安装的,后者可能没有安装。

我对如何做到这一点有一些想法,但它让我觉得应该更平滑。

我可能还需要部署一个新的perl,所以我在思考我是否最好安装系统perl的模块(在RHEL5上可能是5.8.8),或者只是'整理'整个东西它是一个独立的perl实例的目录。

3 个答案:

答案 0 :(得分:4)

使用pp将脚本和所有相关模块和库打包成独立的可执行文件。

pp -x yourscript.pl -o outputfilename

如果需要,请参阅文档以获取如何链接到外部共享对象(等)的示例。使用pp,在outputfilename将运行的目标系统上不需要perl。

答案 1 :(得分:1)

重新审视这一点,因为需求并没有真正消失。我已经开始使用docker - 这是一个'形象'和'容器'应用程序部署系统,除其他外,允许您打包'申请。

您创建一个Dockerfile - 与Makefile类似 - 贯穿安装perl +依赖项的步骤(通过包管理器或CPAN)。< / p>

一旦有了,你就拥有了一个独立的,可运行的图像&#39;您可以克隆并创建(#&#34;容器&#34;在docker用语中)的实例。

它也非常有用 - 即使你不通过容器部署 - 来弄清楚这个应用程序/软件包的依赖性。容器中的版本具有所需的所有本地安装,因为它是一个干净的构建。

答案 2 :(得分:0)

当你拥有一个无法控制Perl安装的系统时(安装是真正的,非常旧的Perl版本,如5.8.8,它缺少很多很好的改进,比如state个变量, autodiesayswitch),您应该查看Perlbrew

Perlbrew允许您安装Perl的用户版本。 (实际上,它允许您安装多个版本的Perl),并允许您在Perlbrew安装和正式安装的版本之间切换。它使Perl中的所有内容变得更加容易。

您可以更自由地安装新的Perl模块,您可以自己完成该任务,而不是等待IT部门为您完成。

我最终在我们的一个系统上使用它,其中Perl的原始版本并没有做我的Perl版本所做的事情。我最初要求我们的IT升级,但他们真的搞砸了升级。来回走动后,我只是问我是否可以安装Perlbrew。

哪一点很重要。总是请求许可。很多时候,IT部门非常乐意承担责任。他们不是Perl人,而CPAN是一个他们不想处理的世界。能够摆脱必须回答你的问题,并打电话来安装这个或那个Perl模块是一个很大的安慰。