我该如何在我想要分享给他人的Perl脚本中使用CPAN模块?

4
我正在编写一个Perl脚本,将数据写入Excel文件。我使用Excel::Writer::XLSX来实现这个目的。
我希望编写完脚本后可以将其提供给我的团队成员,以便我们需要时都能使用它来汇编数据。
我有几个问题:
  1. 我的同事们需要安装该模块才能使脚本正常运行吗?
  2. 如果不需要,我该如何将模块与脚本一起打包并提供给他们?
  3. 除了我选择的模块,还有更好的方法吗?

请参见https://dev59.com/dVPTa4cB1Zd3GeqPkIvJ。 - brian d foy
3个回答

5

有几种方法可以实现这个目标。其中一种方法是编写一个 Makefile.PL 文件来指定依赖项。这样可以将脚本打包成一个分发包。例如:

use ExtUtils::MakeMaker;

WriteMakefile(
    ABSTRACT          => 'myscript creates Excel files',
    AUTHOR            => 'A.U. Thor',
    EXE_FILES         => [ 'myscript' ],
    NAME              => 'myscript',
    VERSION           => '1.2.3',

    PREREQ_PM => {
        'Excel::Writer::XLSX' => '0.88',
    },
);

然后,人们可以执行perl Makefile.PL,这将告诉他们所需的依赖项。如果您执行make dist并分发生成的存档文件,他们还可以使用cpanm来安装您的脚本及其依赖项。
另一个选择是组合cpanfile。然后,接收者可以使用诸如cpanm之类的工具安装所有依赖项。
现在,如果您将脚本分发给不经常使用Perl的人,并且希望他们能够轻松点击和运行等操作,您可能需要了解pp

1
我认为你和Brian都没有回答OP的具体问题。 - Borodin

3
很久以前,我写了一个叫做scriptdist的程序,将单文件程序转换为类似CPAN的分发包,包括构建文件。这样你就可以将它作为档案传递,并且人们可以像处理任何其他CPAN分发包一样对待它。它基本上自动化了Sinan发布的内容。我在Dr. Dobbs上写过相关文章。
如果你想传递这个档案,有一个技巧可以使用。cpan工具可以从当前目录安装。这将获取依赖项(因为它们是依赖项,所以是必需的):
 $ cpan .

那样,您可以安装程序及其依赖项,而无需将任何内容放入类似CPAN的存储库中。

1
我认为你和Sinan都没有回答OP的具体问题。 - Borodin
3
我不同意。我认为你的回答并没有改进 Sinan 和我所说的内容,而且你引入了比必要更多的问题来让他的同事理解他的程序。 - brian d foy
你可能是对的,也许我误解了原问题。但在这种情况下,特别是您忽略了OP的三个分项问题,我认为描述您所回答的问题会有很大帮助。 - Borodin

-4

你需要了解什么并不清楚

我的同事们是否需要安装该模块才能运行脚本?

我认为显而易见的是,你的同事们需要访问你的代码才能使用它

并不清楚你写了什么,但如果你创建了一个模块,那么任何有权访问你的模块文件的程序都可以简单地用 use 来访问它的功能

如果不需要,我如何将模块与脚本打包给他们?

你的 "如果不需要" 不是很清楚。你所写的意思是 "如果他们不需要安装该模块才能运行脚本",我怀疑这是否是你的意图

"如何将模块与脚本打包" 你是在问如何创建模块,还是已经拥有一个?通常,程序员会使用 use 语句编写脚本来访问模块

如果您有一个模块,并且希望其他人能够使用use加载它,则必须出现在列在其@INC数组中的目录之一中。如果您正在使用不同的系统,则最好创建一个包,您可以根据需要进行更改,并让其他人更新。

有没有比我选择的模块更好的方法?

您是指Excel::Writer::XLSX还是您自己的模块?

如果Excel::Writer::XLSX已经满足您的需求,那么您可能不应该更改。但是,如果您在某些方面遇到问题,则需要提出新问题并描述这些问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接