如何在Perl中重新分发非核心模块?

时间:2012-07-05 15:01:27

标签: perl

我对Perl相对较新,我需要一些帮助来重新分配非核心模块。这是整个故事。

Perl脚本中使用了两个非核心模块: XML :: Simple SOAP :: Lite 。我正在使用的版本(目前在Windows上)是Strawberry Perl,所以这两个模块已经包含在内。但是,我们不知道最终用户(Unix / Linux系统)是否具有这两个模块,因为它们可能只有标准版本,因此只有核心模块。我的目标是让最终用户尽可能少地进行配置/安装。

首先,我试着看看是否有类似 XML :: Simple SOAP :: Lite 的核心模块。不幸的是,我没有发现任何问题(如果我错了,请纠正我。)

所以我猜现在唯一的选择是重新分配这两个模块。我查了一下,这两个模块允许重新分配。我现在的问题是如何做到这一点。我尝试使用关键字“perl redistribute”搜索,但没有找到任何有用的东西。我的猜测是我们使用导出工具来实现这一目标。但这两个模块是相当复杂的模块,它们有几个嵌套的文件夹/ p​​m文件(以及一大堆其他文件,如MAKE,pod,ini文件),所以我不确定我应该做什么。我使用导出器找到的示例相当简单:它们只有1 pm文件和1 pl文件,它们被放在一个文件夹中。

此外,我愿意接受任何其他更好的方法来解决问题。目标只是确保所有最终用户都可以使用我的脚本进行最少的配置/安装工作,因为我们不希望它们遇到一大堆兼容性问题。

任何帮助将不胜感激。谢谢! = d

3 个答案:

答案 0 :(得分:5)

我想详细说明@ikegami说。

SOAP::Lite有一个large number of CPAN dependencies,因此安装模块的人员需要CPAN访问才能构建它,无论您是为它们提供,还是将其列为依赖项。否则,您需要提供整个依赖关系树,此时,您最终使用perlbrew,也许是carton,可能是local :: lib,然后您可能决定需要更高级别并生成RPM和DEB。 / p>

可能更好地提供您的脚本,打包为CPAN模块,列出您的依赖关系,并让芯片落在他们可能的位置。

答案 1 :(得分:4)

只需在Makefile.PL或Build.PL中声明对模块的依赖,然后给它们以下安装说明:

cpanm script.tar.gz

答案 2 :(得分:3)

Perl最棒的一点是CPAN,即Perl Perlling Archive网络。它是一种镜像服务,因为Perl 5最初出现的时间允许人们通过标准的通用工具{XML::SimpleSOAP::Lite共享有用的附加模块,cpanMakefile.PL 1}} Perl附带的客户端。几乎所有的Perl发行版(例如Strawberry Perl和Linux附带的大多数Perl发行版)都配置了CPAN客户端并将其包含在内。该客户端允许人们只需知道模块的名称即可从CPAN下载和安装模块。

CPAN上的几乎所有模块分布都遵循完全相同的布局。它们通常有一个Build.PL文件(如果它使用ExtUtils :: MakeMaker来生成安装脚本),lib文件(如果它使用Module :: Build来生成安装脚本),或者两者都有。这些Perl脚本一旦运行,就会创建一个' Makefile'或者#' Build'文件,可以让您安装模块并验证是否满足所有先决条件。

如果您之前从未制作过Perl发行版,则可以从CPAN下载所需的任何发行版,并查看内容的布局方式。一旦你看到文件夹和文件位置非常直观。它们通常使用安装脚本和根目录中的支持文件(如自述文件),使用t目录中的自定义模块(您创建的模块)以及{{1}中的单元测试进行布局。 }目录。

如果您是新手,我建议您查看基于Build.PL的广告;这些是基于Perl的纯安装脚本。如果您决定制作基于Module.PL的发行版,则可以非常轻松地指定您的模块发行版需要XML::SimpleSOAP::Lite。首先,创建一个基本的Module :: Build安装脚本。这看起来像:

use Module::Build;
my $build = Module::Build->new(
    module_name => 'Foo::Bar',
    license  => 'perl',
    requires => {
        'perl'          => '5.6.1',
        'Some::Module'  => '1.23',
        'Other::Module' => '>= 1.2, != 1.5, < 2.0',
    },
);
$build->create_build_script;

(这是从Module::Build::Authoring文档中获取的。)

然后,指定所需的库及其最低版本。零(0)是一个可接受的版本,如果你不在乎,但这意味着什么&#34;任何&#34;很好。我建议至少指定您正在测试的计算机上安装的库的版本。

(简洁的捷径:你可以找到任何定义了$ VERSION包变量的库的版本:

perl -MSome::Lib -E "say Some::Lib->VERSION()"

要安装模块,步骤如下所示:

cd folder\where\my\lib\is
perl Build.PL
Build
Build test
Build install

这将创建安装工具,准备用于测试的文件夹(通常只是将内容复制到构建库区域以获取简单模块),运行t文件夹中的所有.t脚本(&#34;测试& #34;,它通常在安装之前使用Test::More对模块进行单元测试),然后最后将模块安装到PC的Perl站点库中。

Build脚本,作为&#39;设置的一部分&#39;阶段,将查看您的先决条件,并警告您,如果您还没有。

然后,如ikegami's answer所述,如果您使用cpanm客户端安装库,cpan客户端将自动为您下载,下载,测试和安装您的依赖项!或者,基于Build.PL的安装程序也可以安装&#39; installdeps&#39;选项,它将做同样的事情。然后,即使它们将来发生变化,也会自动下载,测试和安装任何和所有依赖项(以及可能的递归依赖项)。