2012-07-05 21 views
4

我對Perl比較新,我需要一些重新分配非核心模塊的幫助。這是整個故事。如何在Perl中重新分配非核心模塊?

有在Perl腳本中使用的兩個非核心模塊:XML ::簡單SOAP ::精簡版。我使用的版本(目前在Windows上)是Strawberry Perl,所以這兩個模塊已經包含在內。但是,我們不知道最終用戶(Unix/Linux系統)是否擁有這兩個模塊,因爲它們可能只有標準版本,因此只有核心模塊。我的目標是讓最終用戶儘可能少地進行配置/安裝。

首先,我想看看是否有任何核心模塊,它類似於XML ::簡單SOAP ::精簡版。不幸的是,我沒有找到任何(如果我錯了,請糾正我)。

所以我想現在唯一的選擇是重新分配這兩個模塊。我檢查了這兩個模塊允許重新分配。我現在的問題是如何去做。我試着用關鍵詞「perl redistribute」搜索google,但沒有找到有用的東西。我的猜測是我們使用導出工具來實現這一點。但這兩個模塊是相當複雜的模塊,它們有幾個嵌套的文件夾/ p​​m文件(以及其他一些文件,如MAKE,pod,ini文件),所以我不知道該怎麼做。我用exporter找到的例子非常簡單:它們只有1 pm文件和1 pl文件,並且它們被放置在一個文件夾中。

此外,我接受任何其他更好的方法來處理這個問題。我們的目標只是確保所有最終用戶都可以使用腳本進行最少的配置/安裝工作,因爲我們不希望他們遇到大量兼容性問題。

任何幫助,將不勝感激。謝謝! = d

回答

3

有關Perl的最好的東西之一是CPAN,Perl綜合檔案網絡。這是一種鏡像服務,自從Perl 5最初推出以來,允許用戶通過標準的通用工具cpan客戶端共享有用的附加模塊,如XML::SimpleSOAP::Lite。幾乎所有的Perl發行版(如Linux附帶的Strawberry Perl和大多數Perl發行版)都配置了一個CPAN客戶端,並且包含在其中。該客戶端只需知道模塊的名稱即可讓人們從CPAN下載和安裝模塊。

幾乎CPAN上的所有模塊分配都遵循完全相同的佈局。它們通常有一個Makefile.PL文件(如果它使用ExtUtils :: MakeMaker生成安裝腳本),Build.PL文件(如果它使用Module :: Build生成安裝腳本)或兩者。這些Perl腳本一旦運行,就會創建一個'Makefile'或'Build'文件,讓您可以安裝該模塊並驗證是否滿足所有先決條件。

如果你之前從未做過Perl發行版,你可以從CPAN下載你想要的任何發行版,並看看事情是如何佈置的。一旦你看到一個文件夾和文件位置非常直觀。它們通常使用安裝腳本和支持文件(如自述文件)放在根目錄中,使用lib目錄中的自定義模塊(您製作的模塊),並在t目錄中進行單元測試。

如果你是一個新手,我建議你看基於Build.PL的那些;這些都是純粹的基於Perl的安裝腳本。如果您決定製作基於Module.PL的發行版,則指定您的模塊發行版需要XML::SimpleSOAP::Lite是非常簡單的。首先,創建一個基本的基於Module :: Build的安裝腳本。這看起來像這樣:

use Module::Build; 
my $build = Module::Build->new(
    module_name => 'Foo::Bar', 
    license => 'perl', 
    requires => { 
     'perl'   => '5.6.1', 
     'Some::Module' => '1.23', 
     'Other::Module' => '>= 1.2, != 1.5, < 2.0', 
    }, 
); 
$build->create_build_script; 

(這是從Module::Build::Authoring docs採取)。

然後,指定您需要的庫和它們的最低版本。如果你不在意Zero(0)是可以接受的版本,但這意味着「任何事物」都是好的。我建議至少指定要測試的機器上安裝的庫的版本。

(利落的短切:你可以發現,有做定義的$ VERSION包變量任何庫的版本:

perl -MSome::Lib -E "say Some::Lib->VERSION()" 

安裝模塊,操作步驟看是這樣的:

cd folder\where\my\lib\is 
perl Build.PL 
Build 
Build test 
Build install 

這將創建安裝工具,用於測試準備的文件夾(通常只是複製的東西,以簡單的模塊,構建庫面積),運行所有.T SCR在t文件夾中的ipts(「tests」,通常使用Test::More在安裝之前對模塊進行單元測試),然後最後將模塊安裝到您的PC的Perl站點庫中。

Build腳本作爲'設置事項'階段的一部分,將查看您的先決條件,並警告您是否還沒有它們。

然後,如ikegami's answer所指出的那樣,如果您使用cpanm客戶端來安裝您的庫,那麼cpan客戶端將會自動出去,下載,測試併爲您安裝您的依賴關係!另外,基於Build.PL的安裝程序也具有「installdeps」選項,它將執行相同的操作。然後,即使它們將來發生變化,也會自動下載,測試和安裝任何和所有依賴項(以及潛在的遞歸依賴項)。

+0

嗨,羅伯特。非常感謝您的詳細解釋。我只是想確保我理解正確。所以基本上我需要將我的腳本打包爲發行版的一部分,並安裝最終用戶(我的腳本,依賴項:SOAP :: Lite和XML :: Simple)?最終用戶如何運行我的腳本呢?通過說「使用___」在其他腳本中導入它? – 2012-07-05 18:01:40

+0

首先,您將創建一個Module分配,指定腳本的所有依賴關係。然後,你會發布該模塊分發,並讓人們安裝它。安裝完成後,你的腳本也會被安裝(只要把它放在發行版的'bin'文件夾中,我想。) – 2012-07-05 22:57:27

+0

另外,如果你不'想要:你可以創建一個只有空的「My :: Script :: Deps」庫的分發版,你的腳本會檢查以確保已安裝(通過在腳本中使用'My :: Script :: Deps' )然而,將腳本與其他Module分發包打包使得管理對任何庫的更改以及腳本本身都是一個版本化單元非常方便! – 2012-07-05 23:03:00

4

就說明在你的Makefile.PL或Build.PL模塊的依賴關係,然後給他們下面的安裝說明:

cpanm script.tar.gz 
+0

在互聯網跋涉的精神下,如果你在代理之後,cpanm並沒有很好的時機,在這一點上,你將不得不求助於設置你的代理變量,並使用'cpan install'而不是'cpanm ' – 2013-09-23 15:48:36

+0

@Len Jaffe,'cpan'在這裏不起作用。它並不需要tarball作爲參數。 – ikegami 2013-09-23 15:49:16

5

我想闡述一點點@ikegami說。

SOAP::Lite有一個large number of CPAN dependencies,因此安裝模塊的人員需要CPAN訪問才能構建它,無論是爲他們提供還是將其列爲依賴項。否則,你需要提供你的完整的依賴關係樹,在這一點上,你最終會使用perlbrew,也許紙箱,可能是local :: lib,然後你可能會決定你需要更高級別並生成RPM和DEB。

可能只是提供腳本,打包爲CPAN模塊,列出其中的依賴關係,並讓芯片落在可能的位置。