什么';安装缺失的Perl模块的最简单方法是什么?

什么';安装缺失的Perl模块的最简单方法是什么?,perl,installation,cpan,Perl,Installation,Cpan,我得到这个错误: 无法在@INC中找到Foo.pm 有没有比下载、排除错误、制作等更简单的安装方法?sudo perl-MCPAN-e'install Foo'在Unix上安装它: 通常在shell中启动cpan: $cpan 和类型 安装巧克力::比利时 或简而言之: cpan巧克力::比利时 在Windows上: 如果您在Windows上使用ActivePerl,则具有与CPAN.pm基本相同的功能 例如: $ppm ppm>搜索网smtp ppm>install Net SMTP Mult

我得到这个错误:

无法在@INC中找到Foo.pm


有没有比下载、排除错误、制作等更简单的安装方法?

sudo perl-MCPAN-e'install Foo'在Unix上安装它:

通常在shell中启动cpan:

$cpan

和类型

安装巧克力::比利时

或简而言之:

cpan巧克力::比利时

在Windows上

如果您在Windows上使用ActivePerl,则具有与CPAN.pm基本相同的功能

例如:

$ppm

ppm>搜索网smtp

ppm>install Net SMTP Multipart

参见CPAN常见问题解答中的

许多发行版将许多perl模块作为包提供

  • Debian/Ubuntu:
    apt缓存搜索“perl$”
  • Arch Linux:
    pacman-Ss'^perl-'
  • Gentoo:category
    devperl
您应该始终选择它们,因为您可以从自动(安全)更新和删除的方便性中获益。对于cpan工具本身来说,这可能非常棘手


对于Gentoo,有一个很好的工具叫做,它从CPAN构建/安装模块,并为您创建Gentoo包()。

如果您在Ubuntu上,并且希望安装预打包的perl模块(例如,geo::ipfree),请尝试以下方法:

$ apt-cache search perl geo::ipfree libgeo-ipfree-perl - A look up country of ip address Perl module $ sudo apt-get install libgeo-ipfree-perl $apt缓存搜索perl geo::ipfree libgeo ipfree perl-查找ip地址的国家/地区perl模块 $sudo apt get安装libgeo ipfree perl
在具有ActiveState Perl发行版的Windows上,使用命令。

我知道的两种方法:

使用PPM:

对于Windows(ActivePerl),我使用了ppm

从命令行输入ppm。在ppm提示下

ppm> install foo

获取可用的foo模块列表。键入所有命令的帮助

使用CPAN:

您也可以像这样使用CPAN(*nix systems):

给你一个提示

cpan>
在提示下

cpan> install foo  (again to install the foo module)

键入h以获取cpan的命令列表

我注意到一些人建议在sudo下运行cpan。这在安装到系统目录时是必需的,但是CPANshell的现代版本允许您将其配置为使用sudojust进行安装。这更安全,因为这意味着测试不会以root身份运行

如果您有一个旧的CPAN shell,只需安装新的CPAN(“install CPAN”),当您重新加载shell时,它会提示您配置这些新指令

现在,当我在一个使用旧CPAN的系统上工作时,我要做的第一件事就是更新shell并将其设置为这样做,这样我就可以像普通用户一样完成大部分CPAN工作


另外,我强烈建议Windows用户进行调查。这是一个Perl版本,它附带了一个预配置的CPANshell和一个编译器。它还包括一些带有外部C库依赖项的难以编译的Perl模块,特别是XML::Parser。这意味着,在安装模块时,您可以和其他Perl用户做同样的事情,而且事情往往更容易“正常工作”。

一些人提到了cpan实用程序,但它不仅仅是启动一个shell。只要给它你想安装的模块,让它做它的工作

$prompt> cpan Foo::Bar
如果不给它任何参数,它将启动CPAN.pm shell。这可以在Unix、Mac上运行,在Windows(尤其是Perl)上应该也可以

使用cpan工具还可以做其他一些事情。以下是当前功能的摘要(可能比CPAN.pm和perl附带的功能更新):

-a
使用CPAN::Shell->autobundle创建CPAN.pm自动绑定。
-模块[模块…]
显示指定模块的主要维护程序
-C模块[模块…]
显示指定模块的更改文件
-D模块[模块…]
显示模块详细信息。这会为每个过期模块打印一行(即,
模块在本地安装,但在CPAN上有更新的版本)。每行有三列:
模块名称、本地版本和CPAN版本。
-作者[作者…]
列出指定作者编写的模块。
-h
打印一条帮助消息。
-O
显示过时的模块。
-r
使用CPAN::Shell->recompile重新编译动态加载的模块。
-五
打印脚本版本和CPAN.pm版本。

另请参见。它展示了如何在没有root或sudo访问权限的情况下使用CPAN。

CPAN.pm
有很多建议,这很好,但是如果您使用的是
Perl 5.10
,那么您还可以访问
CPANPLUS.pm
,这与
CPAN.pm
类似,但更好

当然,对于仍在使用较旧版本Perl的用户,可以在
CPAN
上找到它。为什么不试试:

$ cpan CPANPLUS
奥托做了一个决定。这也适用于Debian,以及任何其他Debian衍生品。缺少的部分是当apt缓存搜索没有找到某些内容时该怎么做

$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update
然后,每当您有一个随机模块要安装时:

$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb
这将为您提供一个deb包,您可以安装它来获得一些::Random::Module。这里最大的好处之一是手册页和示例脚本以及模块本身将放置在您选择的发行版位置。如果发行版为较新版本的Some::Random::Module提供了官方软件包,那么当您升级时,它将自动安装。

在Fedora上,您可以使用

# yum install foo
只要Fedora有模块的现有包。

请尝试:

这是伟大的只是让东西安装。它不提供CPAN或CPANPLUS更复杂的功能,因此易于使用,前提是您知道要安装哪个模块。如果尚未获得cpanminus,只需键入:

# cpan App::cpanminus
# yum install foo
# cpanm Chocolate::Belgian
# cpan App::cpanminus
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
cpan -i module_name
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
cpanm Foo
cpanm Module::One
cpanm Another::Module
perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
sudo apt-get install libfoo-bar-perl
 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
$ cpan HTML::Parser
$ perl -MCPAN -e shell
cpan[1]>  o conf prerequisites_policy follow
cpan[2]>  o conf commit
exit
$ cpanm HTML::Parser
yum install 'perl(Chocolate::Belgian)'
#!/usr/bin/perl

use warnings;
use strict;

#I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root
$ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';

#Fill this with the perl modules required for your project
my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable);

chomp(my $curl = `which curl`);

if(!$curl){ system('apt-get install curl -y > /dev/null'); }

chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null'));

#installs cpanm if missing
if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); }

#loops through required modules and installs them if missing
foreach my $x (@perl){
    eval "use $x";
    if($@){
        system("cpanm $x");
        eval "use $x";
    }
}
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'
'urllist' => [q[http://www.cpan.org/]],
'urllist' => [q[https://www.cpan.org/]],