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

239
我收到了以下错误信息:

在@INC中找不到Foo.pm

有没有比下载、解压、编译等更简单的安装方法?

1
如果涉及的模块是核心模块,请参考如何修复“无法定位到Archive/Tar.pm” - ikegami
在安全方面要非常小心:必须以安全的方式从受信任的网站下载所需的内容,以确保模块未被修改。请参见有关cpan使用的我的答案 - vinc17
24个回答

274

在Unix操作系统下:

通常你会在shell中启动cpan

$ cpan

并输入:

install Chocolate::Belgian

或者简写为:

cpan Chocolate::Belgian

在Windows操作系统下:

如果你在Windows上使用ActivePerl,那么PPM(Perl Package Manager)有许多与CPAN.pm相同的功能。

例如:

$ ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart

参见CPAN FAQ中的如何安装Perl模块?

许多发行版都会将大量Perl模块作为软件包提供。

  • Debian/Ubuntu:apt-cache search 'perl$'
  • Arch Linux:pacman -Ss '^perl-'
  • Gentoo:类别dev-perl

你应该始终优先使用它们,因为你可以从自动(安全)更新卸载的便利性中受益。这在cpan工具本身中可能非常棘手。

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


4
据我所知,最新的ActivePerl已经不再具备命令行ppm,而是采用了一个时髦的图形用户界面。 - Kev
6
只需输入“ppm”即可打开图形用户界面,但跟随命令将保留在命令行上。因此,例如“ppm help”,“ppm install ...”等命令可以在命令行中执行。 - Bill Ruppert
请注意,ppm使用破折号作为模块路径分隔符,而不是通常的双冒号。(也许因为在dos中冒号表示驱动器?)这让我有几次出错 ;) - Matthew Lock
3
@MatthewLock:ppm 使用连字符 - 是因为你需要指定你想要安装的发行版,这更加诚实。例如,如果你使用 cpan 安装 LWPLWP::SimpleLWP::UserAgent,它将为你安装 libwww-perl 发行版。大多数发行版只包含一个与名称相同的模块,但也有几个例外情况。 - Borodin
1
对于UNIX和MacOS,需要以root或sudo的身份执行。否则,会出现权限错误。 - flow2k
显示剩余2条评论

70

尝试使用 App::cpanminus

# cpanm Chocolate::Belgian

它非常适合用于只需安装一些东西的情况。它不提供CPAN或CPANPLUS的更复杂功能,因此只要您知道要安装哪个模块,它就很容易使用。如果您尚未拥有cpanminus,只需键入:

# cpan App::cpanminus

安装的方法。

也可以不使用cpan来安装。基本的引导程序如下:

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

欲了解更多信息,请访问App::cpanminus页面并查看安装部分。


7
使用cpan命令安装App::cpanminus有些奇怪。通常的安装方法涉及引导程序,需要从http://cpanmin.us下载一部分内容,然后使用它来安装其余部分。这可以避免配置`cpan`和创建(此后)无用的`.cpan`目录。 - Chas. Owens
在Ubuntu上,您可以直接从终端安装cpanminus。我发现cpanmcpan更好,因为它不会将错误日志放在屏幕上,而是将它们存储在临时日志文件中,并在出现错误时提供路径。 - user13107
当我尝试运行您的命令时,出现了以下错误:在@INC中找不到strict.pm(您可能需要安装strict模块)(@INC包含:/etc/perl)。 - IgorGanapolsky

29

我注意到有些人建议使用sudo来运行cpan。这曾经是必要的,用于安装到系统目录中,但现代版本的CPAN shell允许您配置它仅在安装时使用sudo。这样做更安全,因为这意味着测试不会以root身份运行。

如果您使用的是旧版的CPAN shell,只需安装新的cpan("install CPAN"),然后重新载入shell,它应该提示您配置这些新指令。

如今,当我在使用旧版的CPAN时,我做的第一件事就是更新shell并设置它以此方式操作,这样我就可以像普通用户一样完成大部分的cpan工作。

此外,我强烈建议Windows用户调查Strawberry Perl。这是一个Perl版本,它附带了预配置的CPAN shell和编译器。它还包括一些难以编译的Perl模块及其外部C库依赖项,特别是XML::Parser。这意味着在安装模块方面,您可以像其他Perl用户一样操作,并且往往会更加容易成功执行。


1
安装CPAN从哪里开始?是从$sudo apt-get install cpan吗? - isomorphismes
1
@老子:不,因为CPAN是Perl核心模块,不作为单独的DEB软件包提供。我认为在大多数情况下最好使用App::cpanminus,使用它非常愉快。Philip Potter在这里建议使用它,您可以尝试这个Chas. Owens的答案 - w.k

26

如果您使用Ubuntu系统并想安装预装的Perl模块(例如geo::ipfree),请尝试以下步骤:

    $ apt-cache search perl geo::ipfree
    libgeo-ipfree-perl - 一个查找IP地址所在国家的Perl模块
$ sudo apt-get install libgeo-ipfree-perl

“apt-cache search perl” 似乎只适用于简单情况(可能仅在搜索词类似于 Debian 软件包名称时有效)。例如,对于“apt-cache search perl DDP”,它会失败 --- 正确的答案应该是“libdata-printer-perl”。 - Slaven Rezic

17

有几个人提到了cpan实用工具,但它不仅仅是启动一个shell。只需给它要安装的模块,让它自己工作就行了。

$prompt> cpan Foo::Bar

如果您不给它任何参数,它将启动CPAN.pm shell。这适用于Unix、Mac,并且在Windows上应该也没问题(尤其是Strawberry Perl)。

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

-a
Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.

-A module [ module ... ]
Shows the primary maintainers for the specified modules

-C module [ module ... ]
Show the Changes files for the specified modules

-D module [ module ... ]
Show the module details. This prints one line for each out-of-date module (meaning,
modules locally installed but have newer versions on CPAN). Each line has three columns:
module name, local version, and CPAN version.

-L author [ author ... ]
List the modules by the specified authors.

-h
Prints a help message.

-O
Show the out-of-date modules.

-r
Recompiles dynamically loaded modules with CPAN::Shell->recompile.

-v
Print the script version and CPAN.pm version.

15

sudo perl -MCPAN -e 'install Foo'


太棒了,这个方法刚刚在我使用的 Windows Git perl 上起作用了,但是我必须先安装 GnuWin make。 - wytten

10

9

已经有答案并且已被接受-但无论如何:

在我看来,在类unix系统上安装CPAN模块的最简单方法(对于Windows我不知道)是:

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

以上是安装名为cpanm的“零配置CPAN模块安装器”。(安装可能需要几分钟,请不要中断过程)
之后,只需执行以下操作:
cpanm Foo
cpanm Module::One
cpanm Another::Module

8

Otto提出了一个好建议。这对于Debian以及任何其他的Debian衍生版也适用。缺失的部分是当apt-cache search找不到东西时该怎么做。

$ 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软件包,您可以安装以获取Some :: Random :: Module。 其中一个主要优点是,除了模块本身之外,手册页面和示例脚本也将放置在您所选择的发行版位置。如果发行版推出Some :: Random :: Module的新版本的官方软件包,则在进行apt-get升级时会自动安装该软件包。

6

使用cpan 模块名命令。


(注:该句为翻译内容,请勿修改)
$ cpan HTML::Parser

自动安装依赖项,请按以下步骤进行:

$ perl -MCPAN -e shell
cpan[1]>  o conf prerequisites_policy follow
cpan[2]>  o conf commit
exit

我更喜欢App::cpanminus,它可以自动安装依赖项。只需要执行以下命令:

$ cpanm HTML::Parser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接