将 perl 脚本与其依赖项捆绑在一起?
Bundling up a perl script with its dependencies?
我有一个 perl 脚本,我将它放在一起进行一些监控和绘图。
它在我的开发系统上运行良好,我可以全权委托从 CPAN 安装我自己的模块。
我正在做的是将它捆绑起来部署到另一个系统上。但这里有一个问题 - 这个另一个系统是 'standalone' 并且没有网络连接。 (而且我有变更控制文件要填写,表明我正在安装什么)。
因此,我真的很想要一个很好的简单方法来弄清楚:
- 我的脚本使用了哪些模块。 (包括依赖项)
- 如何轻松抓住它们(可能 cpan get
)
- 有没有一种简单的方法可以告诉我正在使用什么 external 二进制文件? (我确定使用 ssh
和 rrdtool
- 前者肯定已安装,后者可能未安装)。
我对如何做到这一点有一些想法,但我觉得应该更顺畅一些。
我可能还需要部署一个新的 perl,所以我在考虑我是否更好 'installing' 带有系统 perl 的模块(在 RHEL5 上可能是 5.8.8),或者只是 'packaging' 整个目录都在它自己的目录中,带有一个独立的 perl 实例。
使用 pp 将您的脚本和所有依赖模块和库打包到一个独立的可执行文件中。
pp -x yourscript.pl -o outputfilename
如有需要,请参阅文档以获取有关如何 link 外部共享对象(等)的示例。使用 pp 你不需要目标系统上的 perl,其中 outputfilename
将 运行.
当你有一个你无法控制 Perl 安装的系统(并且安装的是一个非常非常旧的 Perl 版本,比如 5.8.8,它缺少许多不错的改进,比如 state
变量, autodie
、say
和 switch
),您应该查看 Perlbrew。
Perlbrew 允许您安装 Perl 的用户版本。 (实际上,它允许您安装多个版本的 Perl),并允许您在 Perlbrew 安装和正式安装版本之间切换。它使在 Perl 中做任何事情变得非常非常容易。
您将可以更自由地安装新的 Perl 模块,并且您可以自己完成该任务,而不是等待您的 IT 部门为您完成。
我最终在我们的一个系统上使用了它,其中原始版本的 Perl 无法完成我的 Perl 版本所做的事情。我本来要求我们的IT升级,但是他们真的把升级搞砸了。一来二去,索性问能不能安装Perlbrew
这是很重要的一点。总是请求许可。很多时候,IT 部门非常乐意效劳。他们不是 Perl 人,CPAN 是他们不想处理的世界。能够摆脱对安装这个或那个 Perl 模块的拜访和拜访是一种极大的解脱。
重新审视这一点,因为需求并没有真正消失。我已经转向使用 docker
- 这是一个用于应用程序部署的 'image' 和 'container' 系统,除其他外,它允许您 'package' 一个应用程序。
您创建一个 Dockerfile
- 类似于 Makefile
- 运行安装 perl
+ 依赖项的步骤(通过包管理器,或从 CPAN) .
一旦完成,您就拥有了一个独立的、可运行的 'image',您可以克隆并创建一个实例(docker 用语 "container")。
它也非常有用 - 即使您不通过容器部署 - 找出这个 application/packages 的依赖项是什么。容器中的版本在本地安装了所需的一切,因为它是一个干净的构建。
我有一个 perl 脚本,我将它放在一起进行一些监控和绘图。
它在我的开发系统上运行良好,我可以全权委托从 CPAN 安装我自己的模块。
我正在做的是将它捆绑起来部署到另一个系统上。但这里有一个问题 - 这个另一个系统是 'standalone' 并且没有网络连接。 (而且我有变更控制文件要填写,表明我正在安装什么)。
因此,我真的很想要一个很好的简单方法来弄清楚:
- 我的脚本使用了哪些模块。 (包括依赖项)
- 如何轻松抓住它们(可能 cpan get
)
- 有没有一种简单的方法可以告诉我正在使用什么 external 二进制文件? (我确定使用 ssh
和 rrdtool
- 前者肯定已安装,后者可能未安装)。
我对如何做到这一点有一些想法,但我觉得应该更顺畅一些。
我可能还需要部署一个新的 perl,所以我在考虑我是否更好 'installing' 带有系统 perl 的模块(在 RHEL5 上可能是 5.8.8),或者只是 'packaging' 整个目录都在它自己的目录中,带有一个独立的 perl 实例。
使用 pp 将您的脚本和所有依赖模块和库打包到一个独立的可执行文件中。
pp -x yourscript.pl -o outputfilename
如有需要,请参阅文档以获取有关如何 link 外部共享对象(等)的示例。使用 pp 你不需要目标系统上的 perl,其中 outputfilename
将 运行.
当你有一个你无法控制 Perl 安装的系统(并且安装的是一个非常非常旧的 Perl 版本,比如 5.8.8,它缺少许多不错的改进,比如 state
变量, autodie
、say
和 switch
),您应该查看 Perlbrew。
Perlbrew 允许您安装 Perl 的用户版本。 (实际上,它允许您安装多个版本的 Perl),并允许您在 Perlbrew 安装和正式安装版本之间切换。它使在 Perl 中做任何事情变得非常非常容易。
您将可以更自由地安装新的 Perl 模块,并且您可以自己完成该任务,而不是等待您的 IT 部门为您完成。
我最终在我们的一个系统上使用了它,其中原始版本的 Perl 无法完成我的 Perl 版本所做的事情。我本来要求我们的IT升级,但是他们真的把升级搞砸了。一来二去,索性问能不能安装Perlbrew
这是很重要的一点。总是请求许可。很多时候,IT 部门非常乐意效劳。他们不是 Perl 人,CPAN 是他们不想处理的世界。能够摆脱对安装这个或那个 Perl 模块的拜访和拜访是一种极大的解脱。
重新审视这一点,因为需求并没有真正消失。我已经转向使用 docker
- 这是一个用于应用程序部署的 'image' 和 'container' 系统,除其他外,它允许您 'package' 一个应用程序。
您创建一个 Dockerfile
- 类似于 Makefile
- 运行安装 perl
+ 依赖项的步骤(通过包管理器,或从 CPAN) .
一旦完成,您就拥有了一个独立的、可运行的 'image',您可以克隆并创建一个实例(docker 用语 "container")。
它也非常有用 - 即使您不通过容器部署 - 找出这个 application/packages 的依赖项是什么。容器中的版本在本地安装了所需的一切,因为它是一个干净的构建。