如何以程式方式找出哪些 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 上花費了大約 10 分鐘才能從 CPAN 取得並建立所有內容。這等待的時間太長了,特別是如果我每次想運行 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';

這使我能夠搜索每個單獨的包。我無法找到一種以程式設計方式查找部門的方法,因此我手動搜尋了每個部門。

相關內容