Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将perl脚本与其依赖项捆绑在一起?_Perl_Packaging - Fatal编程技术网

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

将perl脚本与其依赖项捆绑在一起?,perl,packaging,Perl,Packaging,我有一个perl脚本,我把它放在一起做一些监视和绘图 它在我的开发系统上运行得很好,我可以全权从CPAN安装自己的模块 我要做的是把它捆绑起来部署到另一个系统上。但这里有一个陷阱——另一个系统是“独立的”,没有网络连接。(我还要填写变更控制文件,说明我正在安装什么) 因此,我真的希望有一个简单的方法来解决: -我的脚本正在使用哪些模块。(包括依赖项) -如何轻松抓取它们(cpan-get可能) -有没有一种简单的方法来判断我使用的是什么外部二进制文件?(我肯定使用的是ssh和rrdtool——前

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

它在我的开发系统上运行得很好,我可以全权从CPAN安装自己的模块

我要做的是把它捆绑起来部署到另一个系统上。但这里有一个陷阱——另一个系统是“独立的”,没有网络连接。(我还要填写变更控制文件,说明我正在安装什么)

因此,我真的希望有一个简单的方法来解决: -我的脚本正在使用哪些模块。(包括依赖项) -如何轻松抓取它们(
cpan-get
可能) -有没有一种简单的方法来判断我使用的是什么外部二进制文件?(我肯定使用的是
ssh
rrdtool
——前者肯定已安装,后者可能未安装)

我有一些关于如何做到这一点的想法,但我觉得这应该是一件更为顺利的事情

我可能还需要部署一个新的perl,因此我正在考虑是否最好使用system perl(RHEL5上可能是5.8.8)来“安装”模块,或者只是使用一个独立的perl实例将整个内容“打包”到自己的目录中

用于将脚本以及所有相关模块和库打包到一个独立的可执行文件中

pp -x yourscript.pl -o outputfilename

有关如何链接到外部共享对象(etc)(如果需要)的示例,请参阅文档。有了pp,在运行
outputfilename
的目标系统上不需要perl。

当您有一个无法控制perl安装的系统时(这个安装是一个非常非常老的Perl版本,比如5.8.8,它缺少了很多很好的改进,比如
状态变量、
自动模具
比如说
,以及
开关

Perlbrew允许您安装用户版本的Perl(事实上,它允许您安装多个版本的Perl),并允许您在Perlbrew安装和正式安装的版本之间切换。它使使用Perl做任何事情都变得非常简单

您将有更自由的权限安装新的Perl模块,您可以自己完成这项任务,而不是等待IT部门为您完成

我最终在我们的一个系统上使用了它,而Perl的原始版本并没有像我的Perl版本那样做。我最初要求我们的it进行升级,但他们真的把升级搞砸了。在反复讨论之后,我只是问我是否可以安装Perlbrew


这是一个重要的问题。总是请求许可。很多时候,IT部门非常乐意这样做。他们不是Perl人员,CPAN是一个他们不想处理的世界。能够摆脱关于安装这个或那个Perl模块的呼叫和回答,是一个极大的解脱。

根据需要重新讨论这个问题这是一个应用程序部署的“映像”和“容器”系统,它允许您“打包”应用程序

您可以创建一个
Dockerfile
,该文件与
Makefile
非常相似,它运行安装
perl
+依赖项的步骤(通过包管理器或从CPAN)

一旦有了它,您就拥有了一个自包含、可运行的“映像”,您可以克隆并创建它的实例(docker术语中的“容器”)


它也非常有用——即使您没有通过容器部署——来确定此应用程序/包的依赖关系。容器中的版本在本地安装了它所需的所有内容,因为它是一个干净的版本。

别误会,我喜欢perlbrew,但我非常确定它需要internet访问说“另一个系统是‘独立’的,没有网络连接”,所以我不认为perlbrew单独解决他们的问题。是的,perlbrew确实需要互联网接入才能安装新的Perls和cpan模块,就像任何系统都需要下载cpan模块和新的Perl系统一样。“…就像任何系统都需要下载cpan模块和新的Perl系统一样”有一些方法可以将依赖项打包到另一个不需要在目标系统上访问网络的系统上(如雪崩博士所指出的
pp
)。(甚至不是临时性的)。如果我能perlbrew并获取一个缓存,那就可以了。我正在研究perlbrew从缓存获取,但这很像是作为私人用户手动安装Perl:下载并编译源代码,但将Perl目录更改为您选择的目录。perlbrew只会为您自动执行此过程。没有真正的在这种情况下使用Perlbrew的优点。您也可以(如果您有自己的Perl)手动安装cpan模块。我也会提到
Par::Packer
,但雪崩博士抢先告诉了我,所以我想我会提到另一个选择。额外的问题-如果我看到Mojolicous是捆绑包的一部分,这会起作用吗?@Sobrique我从pod中拿出一个例子,并将其打包,没有问题。通过提取自执行代码您可以看到包中包含的所有文件。