it-swarm-eu.dev

Jak získám seznam nainstalovaných modulů CPAN?

Kromě snahy

perldoc <module name>

individuálně pro jakýkoliv modul CPAN, který bere mou fantazii nebo prochází souborovým systémem a dívám se na adresáře, nemám ponětí, jaké moduly jsme nainstalovali. 

Jaký je nejjednodušší způsob, jak dostat velký seznam všech nainstalovaných modulů CPAN? Z příkazového řádku nebo jinak.

80
David McLaughlin

To je zodpovězeno v Perl FAQ, odpověď, kterou lze rychle nalézt pomocí perldoc -q installed. Stručně řečeno, jde o použití ExtUtils::Installed nebo použití File::Find, varianty obou z nich byly již dříve popsány v tomto vlákně.

Můžete také najít položku FAQ "Jak zjistím, které moduly jsou v mém systému nainstalovány?" v perlfaq3. Seznam všech odpovědí FAQ naleznete v perlfaq

63
pjf
perldoc perllocal

Upravit: V CPAN FAQ je více informací o něm ().

33
Dan

perldoc -q installed

tvrdí, že cpan -l udělá ten trik, ale nefunguje to pro mě. Druhá možnost:

cpan -a

se vyplivnout pěkný seznam nainstalovaných balíčků a má pěkný vedlejší účinek psaní je do souboru.

24
Paul Rubel

Stojí za zmínku, že perldoc perllocal bude vykazovat pouze moduly instalované přes CPAN. Pokud někdo nainstaluje moduly ručně, nenajde je. Také, pokud máte více lidí, kteří instalují moduly a perllocal.pod je pod kontrolou zdroje, lidé mohou konflikty vyřešit nesprávně a poškodit seznam (to se stalo například v práci).

Bohužel se zdá, že řešení prochází @INC s File :: Find nebo něco podobného. To však nenajde jen moduly, ale také najde související moduly v distribuci. Například by zprávu TAP :: Harness a TAP :: Parser vedle skutečný název distribuce Test :: Harness (za předpokladu, že máte verzi 3 nebo vyšší). Mohli byste je potenciálně sladit s názvy distribucí a zrušit jména, která neodpovídají, ale pak byste mohli vyřadit lokálně postavené a nainstalované moduly.

Věřím, že brian d foy je backpan indexování práce by měl mít kód, který by měl podat v .pm souboru a bude se snažit odvodit distribuci, ale i to selže občas, protože to, co je v balíčku není nutně nainstalován (viz Devel :: Cover :: Inc pro příklad).

23
Ovid

Můžete zkusit ExtUtils-Installed , ale to vypadá pouze v .packlists, takže může chybět moduly, které lidé přesunuli do @INC ručně.

Napsal jsem App-Module-Lister pro kamaráda, který to chtěl udělat jako CGI skript na non-Shell web hostingovém účtu. Jednoduchě si vezmete soubor s modulem a nahrajete jej jako název souboru, který bude váš server považovat za skript CGI. Mimo standardní knihovnu nemá žádné závislosti. Použijte jej jako je nebo krade kód.

Výstupem je seznam modulů a jejich verze:

 Kravata :: Cyklus 1.15 
 Kravata :: IxHash 1.21 
 Kravata :: Přepínač 1.07 
 Kravata :: ToObject 0.03 
 Čas :: CTime 99.062201 
 Čas :: DaysInMonth 99.1117 
 Čas :: Epocha 0.02 
 Čas :: Fuzzy 0.34 
 Čas :: JulianDay 2003.1125 
 Čas :: ParseDate 2006.0814 
 Čas :: Časová zóna 2006.0814 

Chtěl jsem to přidat jako funkci do nástroje cpan, takže to udělám taky. [Čas přechází] A nyní mám -l přepínač v cpan. Mám s tím pár dalších věcí, než to udělám, ale je to v github . Pokud na to nechcete čekat, můžete zkusit přepínač -a, abyste vytvořili autobundle, ačkoliv to kolem seznamu udělá nějaké Pod.

Hodně štěstí;

19
brian d foy
$ for M in `perldoc -t perllocal|grep Module |sed -e 's/^.*" //'`; do V=`perldoc -t perllocal|awk "/$M/{y=1;next}y" |grep VERSION |head -n 1`; printf "%30s %s\n" "$M" "$V"; done |sort
              Class::Inspector     *   "VERSION: 1.28"
                    Crypt::CBC     *   "VERSION: 2.33"
               Crypt::Rijndael     *   "VERSION: 1.11"
                    Data::Dump     *   "VERSION: 1.22"
                   DBD::Oracle     *   "VERSION: 1.68"
                           DBI     *   "VERSION: 1.630"
                   Digest::SHA     *   "VERSION: 5.92"
           ExtUtils::MakeMaker     *   "VERSION: 6.84"
                       install     *   "VERSION: 6.84"
               IO::SessionData     *   "VERSION: 1.03"
               IO::Socket::SSL     *   "VERSION: 2.016"
                          JSON     *   "VERSION: 2.90"
                  MIME::Base64     *   "VERSION: 3.14"
                  MIME::Base64     *   "VERSION: 3.14"
                   Mozilla::CA     *   "VERSION: 20141217"
                   Net::SSLeay     *   "VERSION: 1.68"
                        parent     *   "VERSION: 0.228"
                  REST::Client     *   "VERSION: 271"
                    SOAP::Lite     *   "VERSION: 1.08"
                  Task::Weaken     *   "VERSION: 1.04"
                 Term::ReadKey     *   "VERSION: 2.31"
                Test::Manifest     *   "VERSION: 1.23"
                  Test::Simple     *   "VERSION: 1.001002"
                  Text::CSV_XS     *   "VERSION: 1.16"
                     Try::Tiny     *   "VERSION: 0.22"
                   XML::LibXML     *   "VERSION: 2.0108"
         XML::NamespaceSupport     *   "VERSION: 1.11"
                XML::SAX::Base     *   "VERSION: 1.08"
15
Dan

Zde je skript, který by stačil:

 use ExtUtils::Installed;

 my $inst = ExtUtils::Installed->new();
 my @modules = $inst->modules();
 foreach $module (@modules){
        print $module ." - ". $inst->version($module). "\n";
 }

=head1 ABOUT

This scripts lists installed cpan modules using the ExtUtils modules

=head1 FORMAT

Prints each module in the following format
<name> - <version>

=cut
11
Joakim

Rád bych k tomu použil příkaz CPAN 'r'. Do CPAN Shell se můžete dostat se starým stylem:

Sudo Perl -MCPAN -e Shell

nebo na většině novějších systémů existuje příkaz 'cpan', takže tento příkaz vás dostane do prostředí Shell:

Sudo cpan

(Obvykle musíte použít 'Sudo', abyste ho spustili jako root, nebo použijte 'su -', abyste se stali rootem, než ho spustíte, pokud nemáte nastaven cpan, aby vám umožňoval běžet jako normální uživatel, ale instalovat jako root. Pokud na tomto počítači nemáte kořen, můžete stále používat prostředí CPAN Shell k vyhledání těchto informací, ale nebudete moci instalovat moduly a budete muset projít trochu nastavení při prvním spuštění. spusť to.)

Poté, co jste v prostředí cpan Shell, můžete pomocí příkazu 'r' nahlásit všechny nainstalované moduly a jejich verze. Na výzvu "cpan>" zadejte 'r'. Zobrazí se seznam všech nainstalovaných modulů a jejich verzí. Použít '?' získat další pomoc.

9
amoore

Zde je opravdu hacky způsob, jak to udělat v * nix, dostanete nějaké věci, které vám opravdu záleží (např .: varování: registr atd.), Ale mělo by vám dát seznam každého souboru .pm, který je dostupný přes Perl.


for my $path (@INC) {
    my @list = `ls -R $path/**/*.pm`;
    for (@list) {
        s/$path\///g;
        s/\//::/g;
        s/\.pm$//g;
        print;
    }
}
6
shelfoo

Můžete získat seznam modulů Perlu instalovaných ve vašem systému pomocí příkazu instmodsh ve vašem terminálu. Budete požádáni o tři možnosti, abyste zvýšili výstup: 

   l            - List all installed modules
   m <module>   - Select a module
   q            - Quit the program
6
Thiyagu ATR
Perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
3
slayedbylucifer

Odpověď lze nalézt v seznamu Perl FAQ .

Měli byste sbírat vynikající dokumentaci, která přichází s Perlem

perldoc perltoc
2
Sinan Ünür

Zkuste man perllocal nebo perldoc perllocal.

2
Walter H

Zde je jednořádková aplikace Perl, která vytiskne seznam nainstalovaných modulů:

Perl -MExtUtils::Installed -MData::Dumper -e  'my ($inst) = ExtUtils::Installed->new(); print Dumper($inst->modules());'

Ujistěte se, že máte nainstalován Data :: Dumper.

2
thealexbaron

Zkuste následující příkaz

instmodsh

2
user2024286

Pro procházení stromem adresářů @INC bez použití externího programu, jako je ls (1), je možné použít modul File::Find::Rule, který má pěkné deklarační rozhraní.

Také chcete odfiltrovat duplikáty v případě, že předchozí verze Perlu obsahují stejné moduly. Tento kód vypadá takto:

#! /usr/bin/Perl -l

use strict;
use warnings;
use File::Find::Rule;

my %seen;
for my $path (@INC) {
    for my $file (File::Find::Rule->name('*.pm')->in($path)) {
        my $module = substr($file, length($path)+1);
        $module =~ s/.pm$//;
        $module =~ s{[\\/]}{::}g;
        print $module unless $seen{$module}++;
    }
}

Na konci běhu máte také všechny názvy modulů jako klíče v% hash. Kód by mohl být upraven tak, aby uložil kanonický název souboru (uvedený v souboru $) jako hodnotu klíče namísto počtu časů, které viděl.

1
dland

Včera jsem napsal skript Perlu, abych to přesně provedl. Skript vrátí seznam modulů Perl instalovaných v @INC pomocí oddělovače '::'. Volání skriptu pomocí - 

Perl perlmod.pl

NEBO 

Perl perlmod.pl <module name> #Case-insensitive(eg. Perl perlmod.pl ftp)

Od této chvíle skript přeskočí aktuální adresář ('.'), Protože jsem měl problémy s opakovanými soft-odkazy, ale můžete jej zahrnout změnou funkce grep v řádku 17 z 

  grep { $_ !~ '^\.$' } @INC

jen,

@INC

Skript lze nalézt zde.

1
aks

Zde je ještě jeden nástroj příkazového řádku pro výpis všech nainstalovaných souborů .pm:

Najít nainstalované moduly Perlu odpovídající regulárnímu výrazu

  • Přenosný (používá pouze základní moduly)
  • Možnost mezipaměti pro rychlejší vyhledávání
  • Konfigurovatelné možnosti zobrazení
1
toolic

V Linuxu/Unixu používám tento jednoduchý příkaz:

Perl -e 'print qx/find $_ -name "*.pm"/ foreach ( @INC );' 

Prohledá všechny složky v souboru @INC a hledá soubor * .pm.

1

Když zadáváte svůj Perl skript, máte všechny nainstalované moduly jako .pm soubory pod složkami v @INC, takže malý bash skript za vás udělá práci:

#!/bin/bash

echo -e -n "Content-type: text/plain\n\n"

inc=`Perl -e '$, = "\n"; print @INC;'`

for d in $inc
do
   find $d -name '*.pm'
done
0
Henrik

Následující pracoval pro mě.

$ perldoc perllocal | grep Module
$ perldoc perllocal | grep -E 'VERSION|Module'
0
caot

kuchařka Perl obsahuje několik iterací skriptu "pmdesc", který dělá to, co chcete. Google-hledat "Perl Cookbook pmdesc" a najdete články o jiných stránkách Q&A , několik výpisů kódu na internetu, diskuse o řešení, a dokonce některé upřesnění

0
knb
cd /the/lib/dir/of/your/Perl/installation
perldoc $(find . -name perllocal.pod)

Uživatelé systému Windows jednoduše vyhledají program Průzkumník Windows.

0
mpersico