2011-05-23 76 views
11

我有Perl 5.13.4與大量的已安裝的CPAN模塊集合。如何使用CPANPLUS autobundle更新Perl的新版本?

我剛剛編譯過Perl 5.14.0。我想將5.13.4中的所有模塊安裝(重新編譯)爲5.14.0。

我可以用'cpanp'和'b'選項生成一捆已安裝的模塊;我現在有一個文件~/.cpanplus/5.13.4/dist/autobundle/Snapshot_2011_05_18_00.pm

  • 什麼是在5.14.0版本「cpanp」,將經過該快照捆的使用確保5.14.0已經安裝了所有這些模塊的命令?

  • 或者,如果cpanp和一個bundle的組合不是合適的方式,那麼複製(重新編譯)安裝在舊版Perl中用於新版本Perl的模塊的最簡單方法是什麼? (如果CPAN可以處理包文件,我將使用它 - 這是我所關心的,不是用來實現它的機制的結果)

我確實需要快速瀏覽一下在這裏找到'perl cpanplus bundle'的問題列表,但沒有找到我所追求的信息,我也曾多次查看過'perldoc cpanp',但沒有找到我以後的信息。同樣說「信息不存在」;它可能僅僅意味着我沒有發現它

回答

8

捆綁文件是一個CPAN特殊的東西, - 令我驚訝 - 不會發生也工作在CPANPLUS中。這就是爲什麼沒有人談論CPANPLUS捆綁包,你找不到任何東西。所以聘用CPAN。首先找出您的CPAN根目錄,默認情況下,它位於免費桌面XDG兼容系統上的~/.cpan~/.local/share/.cpan。相應地修改說明。

mkdir -p ~/.cpan/Bundle 
mv ~/.cpanplus/5.13.4/dist/autobundle/Snapshot_2011_05_18_00.pm ~/.cpan/Bundle 
cpan Bundle::Snapshot_2011_05_18_00 # DTRT 

當你在談論recompile, CPAN has that command,你可以從CPAN命令或者在命令行API調用發出的,但前提是你必須在整個的Perl的版本中的固定位置的模塊是有用的。

+0

這很好,謝謝。如果這是一個選項,我會給你額外的票數。我提到/指定'重新編譯'以表明我期望從源重建模塊 - 一種解決方案提供從新Perl中訪問舊的,已編譯的版本將不符合我的要求。 – 2011-05-23 19:30:12

2

CPANPLUS autobundles從現在開始工作正常。只要確保在軟件包的完整路徑前面加上'file://'即可。

肯定會有一些diddlin,你將不得不處理一些模塊,但大多數情況下它應該是完全可行的。

+0

謝謝:我已經(終於)開始安裝5.14.2,並且在5.14.1中創建快照後,我能夠運行5.14.2'cpanp'並運行'i file:/// Users/jleffler/.cpanplus/5.14.1/dist/autobundle/Snapshot_2012_05_04_00.pm',它在閱讀文件和開始編譯時肯定有效。我最終手動安裝了'CPANPLUS'和'Module :: Signature',因爲缺少這些導致了一些問題,但'file://'前綴是我以前從未見過的關鍵信息。再次感謝。 – 2012-05-04 14:59:06

0

一些額外的信息,可以節省其他人一些頭髮撕裂。

  1. 如果你有一個快照文件$HOME/Snapshot_2013_12_23_00.pm,你可以運行:

    cpanp -i file://$HOME/Snapshot_2013_12_23_00.pm 
    

    和安裝將啓動。

  2. 當你做到這一點,Perl會創建一個文件,如:

    $HOME/cpan/authors/id/UNKNOWN-ORIGIN/Snapshot_2013_12_23_00.pm 
    

    (確切位置將取決於您配置好CPANPLUS庫;礦山進入$HOME/cpan。)

    如果您需要破解快照文件(因爲某些模塊無法編譯),您可以在命令行上編輯並指定文件名,直到您在臉上變得藍色並且完全無毛,並且贏得了「儘管你告訴它看起來在$HOME,CPANPLUS正在查看它複製到UNKNOWN_ORIGIN目錄中的文件。刪除文件當然有效;你也可以編輯它。