2012-02-04 15 views
0

一些Perl模塊,如DBI,需要下載,編譯並安裝如何找出並控制Perl模塊本地存儲的位置?

我正在連接到遠程生產測試計算機,對此我只有我的本地用戶密碼(無根,顯而易見的原因)。我用wget來下載一些我需要的外部模塊,比如DBI,並將這些模塊解壓縮成目錄,如~/modules/DBI-<version>

通常情況下,編譯東西Linux的時候,你運行configure預配置安裝前的一切;其中一個開關是--prefix=<some_dir>,它控制編譯後的可執行文件和所有編譯的依賴關係最終會在哪裏結束。

但對於Perl模塊,你不跑configure,所以我的第一個問題是:

  • 我可以控制在編譯的模塊(例如DBI.pm)當我運行make去?如果是這樣,怎麼樣?

失敗的是,我至少需要更新@INC,所以我可以參考模塊;所以我的第二個問題是:

  • 我怎樣才能找出編譯的模塊去,當我跑make

我不能編譯後發出make install,而且,我一直在問都不到。 (我被要求設計腳本,以便它不依賴於標準系統路徑中的外部模塊。)

+0

我希望你不要介意 - 我冒昧地縮短了你的問題,讓更多的人閱讀它,所以你可以得到更好的答案。 – ruakh 2012-02-04 03:03:48

+0

@ruakh,不,我不介意。我花了很長時間才讓人們停止混淆,就像他們對我關於該主題的其他帖子所做的一樣。這就是爲什麼在開始時它是「OT」的評論,最後是最後的評論,關於「這次」更好的解釋。 ;-) – Igor 2012-02-04 06:13:40

回答

-1

安裝目錄設置。每個模塊都帶有一個Makefile.PL,必須運行該模塊以構建makefile,同時考慮到當前的Perl配置。 Makefile.PL有說,在構建將被安裝,所以拆包模塊的分佈和cd荷蘭國際集團,以解包的目錄後,你可以說

perl Makefile.PL PREFIX=/module/directory/path 
make test 
make install 

這個過程Perl文檔中描述的選項PREFIX - 讀perldoc perlmodinstall 。你可以進入CPAN shell並使用'o'(小寫)操作,它允許你改變傳遞給makefile.PL的選項,但我認爲手動編譯/測試/安裝更直接,並且可以讓你更好地控制處理。

記住

use lib qw(/module/directory/path); 

添加到您的程序,以確保Perl的搜索模塊,新目錄的開始。

+0

在提到這3個命令後,我能夠建立依賴關係嗎?即我爲他們發佈了'DBI',並且需要構建'DBM:mySQL'。它會找到DBI的依賴嗎?謝謝。 – Igor 2012-02-04 16:59:09

+0

@downvoter:爲什麼?如果我錯了,請糾正我。 – Borodin 2012-02-06 21:04:44

+0

@Igor:既然你已經接受了我的答案,它是否適合你?你是否可以在'DBI'之上本地安裝'DBD :: MySQL'? – Borodin 2012-02-07 11:05:56

1

perl模塊應該與發行版的系統一起安裝,就像使用gentoo或pkg_add一樣在BSD上等或通過使用CPAN。不要做你正在做的事情,這會讓你迷惑系統。

perl -MCPAN -e "install DBI" 
+0

它不會嘗試在標準系統路徑中安裝模塊嗎?在Windows上它可能是正常的,但在Linux上不是,在那裏你需要一個root密碼...... – Igor 2012-02-04 06:15:44

+0

CPAN是正確的答案,它可以安裝在整個系統或在你的私有目錄中。詳細信息請閱讀其手冊頁。 – tripleee 2012-02-04 10:41:34

1

您可以使用local::lib將Perl模塊安裝到自定義目錄中。所以安裝的模塊可以從Perl腳本中使用:

use local::lib '/path/to/custom/directory'; # Custom modules can be `use`d from hereon 

cpanm使用local::lib內部當您使用-l-L標誌。要在當前目錄下安裝模塊:該模塊的makefile文件生成時

cpanm -l. DBI 
+0

「cpanm -1。DBI」。這是數字1還是小寫字母l? Linux上的標準Perl安裝也是「cpanm」的一部分嗎?最後我想將它們安裝到〜/模塊中,所以我這樣做:「cd〜/ modules; cpanm -1。DBI」,正確的?這樣它會更新@INC變量,對吧? – Igor 2012-02-04 06:21:16

+0

它是字母'l'而不是數字'1'。 'cpanm'不是標準Perl的一部分,你將不得不手動安裝它。要安裝到'〜/ modules',你可以使用:'cpanm -l〜/ modules DBI'。在程序中:'use local :: lib'〜/ modules''會自動爲你修改'@ INC'。 – 2012-02-04 07:10:14

+0

我在遠程機器上沒有'cpanm'程序,我無法控制那裏發生了什麼。我如何/在哪裏可以獲得/安裝此程序?謝謝。 – Igor 2012-02-10 21:23:49

相關問題