gpt4 book ai didi

perl - 如何找到 Perl 脚本的模块依赖项?

转载 作者:行者123 更新时间:2023-12-02 13:12:29 25 4
gpt4 key购买 nike

我希望另一位开发人员运行我编写的 Perl 脚本。该脚本使用许多 CPAN 模块,必须在运行脚本之前安装这些模块。是否可以使脚本(或 perl 二进制文件)转储所有缺失模块的列表?当我尝试运行脚本时,Perl 会打印出缺少的模块的名称,但这很冗长,并且不会立即列出所有缺少的模块。我想做这样的事情:

$ cpan -i `said-script --list-deps`

或者甚至:

$ list-deps said-script > required-modules # on my machine
$ cpan -i `cat required-modules` # on his machine

有没有简单的方法呢?这不是一个阻碍,但我想让其他开发人员的生活更轻松。 (所需的模块分散在多个文件中,因此我很难在不遗漏任何内容的情况下手动制作列表。我知道 PAR ,但对于我想要的东西来说,它似乎有点太复杂了。)

<小时/>

更新:谢谢,曼尼,这样就可以了。我不知道%INC,我只知道@INC。我解决了这样的问题:

print join("\n", map { s|/|::|g; s|\.pm$||; $_ } keys %INC);

打印出:

Moose::Meta::TypeConstraint::Registry
Moose::Meta::Role::Application::ToClass
Class::C3
List::Util
Imager::Color

看起来这会起作用。

最佳答案

查看Module::ScanDeps以及它附带的“scandeps.pl”实用程序。它可以在编译或运行程序后对代码的依赖项以及 %INC 转储进行静态(和递归)分析。

请注意,静态源扫描总是会因为包含太多依赖项而出错。 (它是 PAR 使用的依赖关系扫描器,旨在让最终用户最简单。)

最后,您可以选择将脚本作为 CPAN 发行版进行分发。这听起来比实际情况要复杂得多。您可以使用类似 Module::Starter 的内容建立暂定 App::YourScript 发行版的基本框架。将脚本放入 bin/子目录中并编辑 Makefile.PL 以引用所有直接依赖项。然后,为了进行分发,您需要执行以下操作:

  1. perl Makefile.PL
  2. 制作
  3. 创建分区

最后一步生成了一个不错的App-YourScript-VERSION.tar.gz现在,当客户端想要安装所有依赖项时,他会执行以下操作:

  1. 正确设置 CPAN 客户端。只需运行它并回答问题即可。但无论如何,您已经要求这样做了。
  2. “tar -xz App-YourScript-VERSION.tar.gz && cd App-YourScript-VERSION”
  3. 运行“cpan”。

CPAN 客户端现在将自动安装所有直接依赖项以及这些发行版的依赖项。根据您的设置方式,它将自动递归地遵循先决条件,或者每次提示 y/n。

作为一个例子,您可以查看 CPAN 上的一些 App::* 发行版。我认为 App::Ack 是一个很好的例子。也许是我的 CPAN 目录 (SMUELLER) 中的 App::* 发行版之一。

关于perl - 如何找到 Perl 脚本的模块依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/358891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com