4

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

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

首先,我尝试查看是否有任何类似于XML::SimpleSOAP::Lite的核心模块。不幸的是,我没有找到任何(如果我错了,请纠正我)。

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

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

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

4

3 回答 3

5

我想详细说明@ikegami 说的。

SOAP::Lite大量的 CPAN 依赖项,因此安装您的模块的人将需要 CPAN 访问权限才能构建它,无论您是为他们提供它,还是将其列为依赖项。否则,您将需要提供整个依赖关系树,此时您最终会使用 perlbrew、可能是 carton,可能还可能是 local::lib,然后您可能会决定需要下一个更高级别并生成 RPM 和 DEB。

最好只提供您的脚本,打包为 CPAN 模块,列出您的依赖项,然后让芯片落在可能的位置。

于 2012-07-05T16:33:15.197 回答
4

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

cpanm script.tar.gz
于 2012-07-05T15:37:42.800 回答
3

Perl 最棒的地方之一是 The CPAN,即综合 Perl 归档网络。这是一个镜像服务,大约在 Perl 5 最初出现的时候,人们就可以共享有用的附加模块,比如XML::SimpleSOAP::Lite通过标准的通用工具,cpan即 Perl 附带的客户端。几乎所有的 Perl 发行版(例如 Strawberry Perl 和大多数 Linux 附带的 Perl 发行版)都配置并包含了 CPAN 客户端。这个客户端让人们只需知道模块的名称就可以从 CPAN 下载和安装模块。

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

如果您以前从未制作过 Perl 发行版,您可以从 CPAN 下载您想要的任何发行版并查看其布局。一旦您看到文件夹和文件位置,就会非常直观。它们通常与根目录中的安装脚本和支持文件(如自述文件)一起布局,目录中包含自定义模块(您制作的模块),lib目录中包含单元测试t

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) 是可接受的版本,但这意味着“任何东西”都很好。我建议至少指定您正在测试的机器上安装的库的版本。

(简洁的捷径:您可以通过以下方式找到任何具有 $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 脚本(“测试”,通常Test::More用于模块的单元测试在安装之前),最后,将您的模块安装到您 PC 的 Perl 站点库中。

作为“设置”阶段的一部分,该Build脚本将查看您的先决条件,并在您还没有它们时警告您。

然后,正如ikegami的回答中指出的那样,如果您使用cpanm客户端安装您的库,cpan客户端会自动为您下载,测试和安装您的依赖项!或者,Build.PL基于安装程序也有“installdeps”选项,它会做同样的事情。然后自动下载、测试和安装任何和所有依赖项(以及潜在的递归依赖项),即使它们将来发生变化。

于 2012-07-05T16:34:26.350 回答