![CPAN 與 APT:版本衝突?](https://rvso.com/image/1035891/CPAN%20%E8%88%87%20APT%EF%BC%9A%E7%89%88%E6%9C%AC%E8%A1%9D%E7%AA%81%EF%BC%9F.png)
我找不到任何地方有這個問題的答案:Does a module displayed by APT跟你透過CPAN安裝的模組衝突嗎?
隨之而來的問題還有:已安裝的 CPAN 模組位於何處?它們是全域可存取的還是僅可供安裝用戶存取?你怎麼知道是哪一個?您如何知道安裝了什麼以及哪個優先順序?
當模組透過 APT 安裝時是否應該使用 CPAN?
答案1
在 Debian 和 Ubuntu 上,CPAN(實用程式)預設/usr/bin/cpan
安裝模組。 /usr/local/lib/
debian 軟體包將其檔案保存在/usr/share/perl5/
和中/usr/lib/perl5/
。因此透過 apt 安裝的檔案/usr/bin/cpan
不會覆蓋透過 apt 安裝的檔案。
使用系統 perl 沒有任何問題,混合 apt 和 cpan 程式碼通常也可以運作。
您也可以選擇手動打包 apt 儲存庫中不可用的任何 cpan 發行版。借助 dh-make-perl 工具,這很容易:
dh-make-perl --cpan Some::Module && cd Some-Module* && sudo debi
答案2
我用珀爾布魯。它安裝本地版本的 Perl 和 cpan。它所做的一切都是在您的主目錄中完成的。安裝和使用非常簡單,您可以安裝最新版本的 Perl。
答案3
直接從 CPAN 安裝時,我建議使用 local::lib 到您私有的目錄。請參閱 boostrapping 技術https://metacpan.org/module/local::lib
這樣,CPAN 安裝的模組將僅由您的使用者使用,並且它將與使用 APT 安裝的模組完全分開。
如果您遇到任何問題或升級 Ubuntu 時,它還可以讓您輕鬆刪除 CPAN 安裝的模組。
這就是我在 Ubuntu 上使用它的方式。
答案4
您可以同時使用兩者,但它們會發生衝突。它們被寫入同一個位置,因此如果您從 apt 安裝某些內容,然後從 cpan 安裝更高版本,則可能會出現問題。
我對 Perl 的了解不多,但在 Python 中我確實遇到了你所說的困境:apt-vs-PyPI。我個人盡可能選擇 apt。這意味著我應該獲得更新,而不必記住維護每個單獨的 Python 套件。不僅如此,這還意味著我的所有系統都應該在這些軟體包的相同版本上運作。
它並不總是有效。有時,您的儲存庫中沒有足夠新的東西,或者您需要的東西沒有打包。這兩種方式都不完美,但我相信很可能會完美更多的完美的。只要意識到你在做什麼就應該沒問題。
編輯- 幾乎忘記了,有一種更好的方法來劃分事物,這樣系統就可以擁有自己的環境,並且您正在開發的任何內容都可以存在於自己的環境中(您完全使用CPAN 進行管理),就像Python 的virtualenv
...