【问题标题】:Is there a simplest way to build perl package有没有最简单的方法来构建 perl 包
【发布时间】:2012-03-13 02:13:44
【问题描述】:

我在 Ubuntu 上编写了一些 Perl 库 (.pm) 和 Perlscripts(.pl),我需要将它们分发给我办公室的同事。这些脚本和库需要第三方库。我想让它变得非常简单。

关于我的信息。

  • 我知道如何创建 Perl 脚本。
  • 我知道如何创建 bash 文件。
  • 我没有创建 MAKE 文件、rpm、Deb 等的经验。

【问题讨论】:

  • 如果你们的同事都有 Ubuntu(最好是同一个版本)并且有足够多的,那么学习如何构建一个*.deb 包可能是值得的。
  • @BasileStarynkevitch,我不想具体说明。他们是 linux 或 Mac 用户
  • 你读过Module::Build吗?
  • @Konerak,我还没试过。这是最简单的方法吗?起初,我认为 rpm 是最简单的,但我坚持使用许多不同版本的“howto”。所以我决定在这里请教专家。
  • @Konerak,实际上,在我问这个问题之前,当我试图自己学习这些东西时,我确实通过了几次那种页面。我的主要问题是我只看到了构建和安装模块的标准过程:perl Build.PL ./Build ./Build test ./Build install 但不知道在哪里创建这个make文件以及如何让它知道我的脚本

标签: perl ubuntu build


【解决方案1】:

我建议使用Module::Starter 为每个模块设置一个模板。安装完成后,您可以在命令行中调用module-starter,例如:

module-starter --module=My::Module --author="Jessada Thutkawkorapin" --email=your@email.com

或者,如果您想要一个包含多个模块的发行版:

module-starter --distro=Foo --module=Foo,Foo::Bar,Foo::Baz --author="Jessada Thutkawkorapin" --email=your@email.com

然后,只需用您的模块覆盖 .pm 文件,包括您想要运行的任何单元测试(默认测试基本上检查模块的语法以及 pod 语法)。然后通过

完成模块的基本安装
perl Makefile.PL
make
make test
make install

(从技术上讲,make test 是可选的,但强烈推荐)。

现在,如果这些模块依赖于其他CPAN模块,那么您可以使用模块CPAN来安装它们,例如:

use strict;
use warnings;
use CPAN;

#populate however you'd like, either hard-coded, read from a file, etc.
my @modules_to_install=(); 

foreach(@modules_to_install)
{
  CPAN::Shell->install($_);
}

因此,您可以分发 zip/tarball/etc,其中包含 module-starter 启动(以及您修改)的文件夹和文件以及上述脚本以安装任何 CPAN 依赖项,并将其命名为 cpan_install.pl .如果需要,您可以将所有内容封装在一个名为 install.pl 的最终脚本中,该脚本完成所有这些操作。

【讨论】:

  • 可能,我的主要问题是如何以及在哪里可以指定我的脚本的位置?我所有的脚本都在 /bin 下,我的 .pm 在 /bin/lib
  • 好吧,对于每个模块(以及对于发行版,如果您使用 --distro 选项),module-starter 包括 libt 目录,以及您可以使用的其他一些样板文件大多忽略。一旦安装了模块(通过perl Makefile.PL;make;make test;make install),它们就会安装到您正在使用的任何 Perl 发行版的 site_perl 子目录中。
  • invoking CPAN yourself to install missing modules 投反对票。而是使用 PREREQ_PM 声明依赖项,以便它们最终出现在发行版元文件中,另请参阅 stackoverflow.com/a/7664993stackoverflow.com/a/2606677 中的示例。
【解决方案2】:

这些天我常用的方法是简单地从我现有的发行版中复制一个Build.PL 文件,然后从那里开始。显然,对于第一个策略,这不是一个有用的策略,但 CPAN 包含了数千个这样的文件。

对于一个简单的单一.pm 文件的纯perl 分发,最简单的方法可能是从复制其他人的Build.PL 文件开始,然后根据您的情况编辑相应的字段。您可能只需要更改 module_namerequires 字段。

这是我的一个简单的,你可以偷^W受到启发:

use strict;
use warnings;

use Module::Build;

my $build = Module::Build->new(
   module_name => 'Your::Name::Here',
   requires => {
      'Your::Requirements::Here' => '1.23',
   },
   build_requires => {
      'Test::More' => 0,
   },
   license => 'perl',
   create_makefile_pl => 'traditional',
   create_license => 1,
   create_readme  => 1,
);

$build->create_build_script;

这些字段按顺序表示:

  • 发行版中主要模块的名称 - 这是发行版本身的名称及其版本和摘要摘要的来源
  • 此发行版构建或运行所依赖的其他模块
  • 此发行版将依赖于构建的其他模块,但一旦安装就不再需要(通常是 Test:: 模块或其他构建工具)
  • 适用于分发的许可条款
  • 为不理解 Build.PL 协议的旧 CPAN 客户端创建旧版 Makefile.PL
  • 根据上述声明的许可条款自动创建一个LICENSE 文件
  • 通过将主模块的 POD 文档转为明文自动创建 README 文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2010-10-14
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    相关资源
    最近更新 更多