CPAN vs. APT: conflitos em versões?

9

Não consigo encontrar a resposta para isso em nenhum lugar: um módulo instalado via APT entra em conflito com outro instalado via CPAN?

Junto com essa pergunta, estão os seguintes: Onde vivem os módulos CPAN instalados? Eles são acessíveis globalmente ou apenas para o usuário instalador? Como você sabe qual? Como você sabe o que está instalado e o que tem precedência?

O CPAN deve mesmo ser usado quando os módulos são instalados via APT?

Mei
fonte

Respostas:

8

No Debian e no Ubuntu, o CPAN ( /usr/bin/cpanutilitário) instala os módulos /usr/local/lib/por padrão. E os pacotes debian mantêm seus arquivos em /usr/share/perl5/e /usr/lib/perl5/. Portanto, os arquivos instalados via /usr/bin/cpannão substituirão os arquivos instalados via apt.

Não há nada de errado em usar o sistema perl, e a mistura do código apt e cpan geralmente funciona.

Você também pode optar por empacotar manualmente qualquer distribuição cpan não disponível em seus repositórios apt. É fácil com a ajuda da ferramenta dh-make-perl:

dh-make-perl --cpan Some::Module && cd Some-Module* && sudo debi
berekuk
fonte
O local onde os cpanmódulos instalados terminam é determinado pelos PERLs Config.pm. No meu Ubuntu 11.04, é /usr/local/share/perl/5.10.1.
Riccardo Murri
Eu acho que é /usr/local/sharepara módulos pure-perl e /usr/local/libpara coisas xs.
precisa saber é o seguinte
6

Eu uso perlbrew . Ele instala uma versão local do Perl e cpan. Tudo o que faz é feito no seu diretório pessoal. É simples de instalar e usar, e você pode instalar a versão mais recente do Perl.

shawnhcorey
fonte
2
Isso também é bom se você quiser se afastar do sistema perl.
Szabgab
4

Ao instalar diretamente do CPAN, eu recomendaria o uso de local :: lib em um diretório privado para você. Veja a técnica do boostrapping https://metacpan.org/module/local::lib

Dessa forma, o módulo instalado do CPAN será usado apenas pelo usuário e terá uma separação muito limpa dos módulos instalados usando o APT.

Também facilitará a remoção dos módulos instalados pelo CPAN, se você encontrar algum problema ou quando atualizar o Ubuntu.

É assim que eu uso no Ubuntu.

szabgab
fonte
1

Você pode usar os dois, mas eles entrarão em conflito. Eles são gravados no mesmo local; portanto, se você instalar algo do apt e depois instalar uma versão posterior do cpan, poderá resolver as coisas.

Eu não faço muito Perl, mas em Python eu certamente tenho o dilema que você está falando: apt-vs-PyPI. Pessoalmente, opto pelo apt sempre que posso. Isso significa que eu deveria receber atualizações sem ter que me lembrar de manter cada pacote Python individual. Não apenas isso, mas significa que todos os meus sistemas devem estar executando na mesma versão desses pacotes.

Nem sempre funciona. Às vezes, você não tem coisas novas o suficiente nos repositórios ou algo que você precisa simplesmente não está empacotado. Nenhuma das maneiras é perfeita, mas acredito que seja mais perfeita. Esteja ciente do que você está fazendo e você deve ficar bem.


Editar - Quase esqueci, existe uma maneira melhor de separar as coisas para que o sistema possa ter seu próprio ambiente e o que você estiver desenvolvendo possa viver em seu próprio ambiente (que você gerencia completamente com o CPAN), como o Python virtualenv...

/programming/1423879/how-can-i-install-specialized-environments-for-different-perl-applications

Oli
fonte
Eu estava esperando que CPAN iria instalar a alguns Siteou sitediretório - ou que pelo menos você poderia forçá-lo.
Mei
3
Nota: no Ubuntu, os cpanmódulos instalados terminam em / usr / local / share / perl (ou o local especificado pelos PERL Config.pm), enquanto os pacotes APT terminam em / usr / share / perl5 conforme a política Debian. Portanto, eles não entram em conflito e é seguro misturar e combinar as instalações de CPAN e APT, como dizem as outras respostas. (Python não é uma boa analogia aqui: PERL embalagem e manipulação de módulo é muito diferente e -IMHO- superior ao Python.)
Riccardo Murri
@ Riccardo: muito bem. O mesmo vale para a Red Hat, embora em um local diferente.
Mei