我如何以编程方式找出哪些 CPAN 模块与打包模块相关?

我如何以编程方式找出哪些 CPAN 模块与打包模块相关?

我正在尝试写一个 Juju 公式应用程序::爱丽丝,一个基于网络的 IRC 客户端。

根据安装说明我执行以下命令从 CPAN 中获取 Alice 及其所有依赖项:

curl -L http://xrl.us/cpanm | perl - --sudo App::cpanminus
cpanm --sudo --installdeps App::Alice

我写公式为了做到这一点,当它启动 EC2 实例时它会安装整个东西,这是我的安装钩子:

#!/bin/bash
DEBIAN_FRONTEND=noninteractive sudo apt-get -y install build-essential libnet-ssleay-perl
set -eux # -x for verbose logging to juj debug-log
curl -L http://xrl.us/cpanm | perl - --sudo App::cpanminus
cpanm --sudo --installdeps App::Alice

问题是,在 m1.small 上,从 CPAN 中获取并构建所有内容需要大约 10 分钟。等待的时间太长了,尤其是如果我每次想要运行 Alice 时都要支付 10 分钟的计算时间!所以我在想,如果我可以安装已经作为软件包存在的 CPAN 模块并将其添加到 apt-get 行中,这将节省大量时间。

当我使用 Alice 时,我立即收到一个错误,提示需要 SSL,因此我将libnet-ssleay-perl包添加到了正确的行中。

我的问题是我不想运行安装并手动确定它需要哪些模块,在档案中搜索它,然后添加它。

是否有一种工具或方法可以让我找出 Alice 需要哪些打包的模块,以便我可以从存档中安装这些模块,还是我需要去搜索每一个模块?

答案1

我查看了 Makefile.PL 并发现了以下内容:

all_from 'lib/Alice.pm';
requires 'List::MoreUtils' => '0';
requires 'Any::Moose' => '0';
requires 'Try::Tiny' => '0';
requires 'EV' => '0';
requires 'AnyEvent' => '5.2';
requires 'AnyEvent::AIO' => '0';
requires 'AnyEvent::IRC' => '0.95';
requires 'AnyEvent::HTTP' => '0';
requires 'Twiggy' => '0';
requires 'Plack' => '0';
requires 'Plack::Session' => '0';
requires 'DBD::SQLite' => '0';
requires 'SQL::Abstract' => '0';
requires 'AnyEvent::DBI' => '0';
requires 'IRC::Formatting::HTML' => '0.28';
requires 'Text::MicroTemplate' => '0.09';
requires 'JSON' => '2.12';
requires 'File::ShareDir' => '0.01';
requires 'File::Copy' => '0';
requires 'Net::SSLeay' => '0';
test_requires 'Test::More' => '0.86';
test_requires 'Test::TCP' => '0';
install_share 'share';
install_script 'bin/alice';

这使我能够搜索每个单独的包。我无法找到以编程方式查找依赖项的方法,因此我手动搜索每个包。

相关内容