Perl:将本地 .pm 文件中的自定义模块“安装”到 Perl 执行环境中?

Posted

技术标签:

【中文标题】Perl:将本地 .pm 文件中的自定义模块“安装”到 Perl 执行环境中?【英文标题】:Perl: "Install" a custom module from a local .pm file into the Perl execution environment? 【发布时间】:2021-04-25 02:27:29 【问题描述】:

Perl 新手在这里学习 Perl 的时间和支持很少,但管理层的所有期望都是像 Perl Pro 一样使用它:)

我在 Cygwin(Windows 10)下使用 Perl(Larry Wall 的 v5.30.2)

我的开发人员发布了一个新脚本,该脚本现在使用了我没有的 Perl 模块。 然后他们将 .pm 文件发给我(他们自己编写,不在任何在线 Perl 存储库中)。

我无法使用 CPAN 将该文件安装到我的 Perl 执行环境中。

    .pm 文件应该保存在哪里? (请指定确切的文件夹) 如何告诉 CPAN 安装此文件以供使用?理想情况下,一次性的事情,因为我不想忘记安装这个文件,如果我每次需要运行 Perl 脚本时都必须这样做......
以防万一亲爱的回答者有任何安全问题:这里没有任何安全问题,这都是在没有连接到互联网的环境下。

【问题讨论】:

将其放在与脚本相同的目录中,并将use FindBin qw( $RealBin ); use lib $RealBin; 添加到脚本中。 如果模块有安装程序,它将把脚本放在perl -V:installsitelib给出的目录中 告诉您的开发人员记录需要发生的事情,并提供一种方法来按需要放置所有内容。你付钱让他做他的工作,而不是我们:) @briandfoy 我是一个卑微的 QA 人,谁关心我们? :D 开发人员使用 mac(这些东西开箱即用),其他人都可以“慢跑”(代替更合适但不雅的短语)...... Ikegami 的 cmets 实际上有所帮助,但揭开了一堆dep 的我无法解决(DBD::Oracle、OCI、MakeFile、local::lib - 并且都必须是兼容版本,不能只拥有“任何”包!)没有专业的环境配置知识......我实际上我会听取您的建议并向管理层报告我无法做到这一点,而不是给我的机器或缺乏支持...... 我们在乎!这是我写的两篇古老的文章,但与Creating Perl Application Distributions和Automating Distributions with scriptdist相关。 【参考方案1】:

Perl 模块只是一个文件(或文件的集合)。你不必把它们放在任何特别的地方,但你需要告诉 Perl 在哪里可以找到它们。

当您使用裸字调用userequire 时,Perl 将该模块名称(如Some::Module)翻译成Some/Module.pm(或任何适合您系统的名称。有人还在使用 VMS 吗?)。

一旦有了模块的文件名形式,它就会在@INC 的目录中查找该子路径。它尝试第一个目录。如果它没有找到它,它会移动到下一个,依此类推。这些目录是在有人配置和安装 Perl 时决定的。而且,在 v5.26 之前,它包含了当前工作目录(参见 v5.26 removes dot from @INC 和 Doesn't Perl include current directory in @INC by default? )

但是,你可以告诉 Perl 去哪里找。 perlfaq8 有 How do I add a directory to my include path (@INC) at runtime?。 ikegami 还在 cmets (How do I add the directory my program lives in to the module/library search path?) 中展示了FindBin

除此之外,您可以告诉 require 加载路径,但您需要确保即使有人从另一个目录运行程序也可以找到该路径

 require './this_file/over/here';
 require '/usr/local/lib/this_file/over/here';

【讨论】:

在 cmets 中,OP 表示该模块有一堆未安装的包含(在他的未联网的系统上),所有这些都必须是特定版本。我知道这不是原始问题的一部分,但您可能想提前阻止不可避免的问题更新。 我的答案是一样的。让开发者提供专业的、行业标准的工作产品。

以上是关于Perl:将本地 .pm 文件中的自定义模块“安装”到 Perl 执行环境中?的主要内容,如果未能解决你的问题,请参考以下文章

Centos 8 Perl模块位置[重复]

perl pm文件如何安装

perl语言中的.pm文件和.pl文件区别

如何从自定义模块中正确导入函数

Rstudio 中的源 .bashrc

安装 CPAN 模块时“目标 'pm_to_blib' 的配方失败”(Text::CSV、Tie::RegexpHash、Log::Log4perl)