Perl 模块安装在错误的根目录

Perl Module getting installed at wrong root dir

我正在尝试更新 perl-DBD-Pg 模块,但是当我尝试安装它时,它会进入错误的根目录。

Tar 我从 CPAN 下载并使用此命令安装的文件

perl Makefile.PL INSTALL_BASE=/usr/lib64/perl5/vendor_perl

我尝试使用 INSTALL_BASE 命令,但它也无济于事 我已将所有模块安装在

/usr/lib/perl5/vendor_perl/

像这样:

drwxr-xr-x.  2 root root   23 May 13  2021 Sys
drwxr-xr-x.  2 root root  142 May 13  2021 HTML
drwxr-xr-x.  8 root root  260 May 13  2021 DBI
drwxr-xr-x.  2 root root   19 May 13  2021 Readonly
drwxr-xr-x.  2 root root   34 May 13  2021 Digest
drwxr-xr-x.  3 root root   31 May 13  2021 Bundle
drwxr-xr-x.  5 root root  186 May 13  2021 DBD
drwxr-xr-x.  4 root root   86 May 13  2021 XML

但不是安装在 /usr/lib/perl5/vendor_perl/,而是安装在 /usr/lib64/perl5/vendor_perl/lib/perl5/x86_64-linux-thread-multi

基本上我正在尝试更新我的 DBD perl 模块,该模块目前是 2.19 版,我们已经更新了 3.15 版,所以我正在尝试更新它

您可能应该使用

PERL_MM_OPT= PERL_MB_OPT= sudo cpan DBD::Pg


首先,你不应该安装在 vendor_perl.

Perl 有三层安装目录:一层用于 Perl 的模块部分(“核心”),一层用于提供 perl 的组织提供的模块(“供应商”),一层用于模块安装最终用户(“站点”)。站点模块覆盖供应商模块,供应商模块覆盖核心模块。

您应该安装到站点目录中。该目录可以通过以下方式获取:

perl -V:installsitelib

对于来自 Ubuntu 20.04.3 LTS 的 perl,那是

installsitelib='/usr/local/share/perl/5.30.0';

关于问题。

安装发行版不仅仅安装模块。

以下所有安装到不同的目录:

  • 没有 build-specific 组件的模块
  • 具有 build-specific 个组件的模块
  • 没有 build-specific 组件的可执行文件
  • 具有 build-specific 个组件的可执行文件
  • 模块文档
  • 可执行文件的文档

INSTALL_BASE="$base" 是一次提供所有这些位置的便捷方式。相当于

eval "$( perl -V:archname )"

INSTALLPRIVLIB="$base/lib/perl5"           \
INSTALLARCHLIB="$base/lib/perl5/$archname" \
INSTALLSCRIPT="$base/bin"                  \
INSTALLBIN="$base/bin"                     \
INSTALLMAN3DIR="$base/man/man3"            \
INSTALLMAN1DIR="$base/man/man1"

如果您希望使用其他模式,则需要单独指定它们。

(如果未提供,INSTALLARCHLIB 可能是从 INSTALLPRIVLIB 构建的?)


也就是说,您似乎想安装 system-provided Perl 的模块。在这种情况下,您应该什么都不提供

PERL_MM_OPT= PERL_MB_OPT= ( perl Makefile.PL && make test && sudo make install )

我会使用以下内容,它还会安装任何必需的依赖项:

PERL_MM_OPT= PERL_MB_OPT= sudo cpan DBD::Pg

以下显示文件将安装到哪些路径:

for n in              \
   installsitelib     \
   installsitearch    \
   installsitescript  \
   installsitebin     \
   installsiteman3dir \
   installsiteman1dir
do
   perl -V:"$n"
done

对于来自 Ubuntu 20.04.3 LTS 的 perl,那是

installsitelib='/usr/local/share/perl/5.30.0';
installsitearch='/usr/local/lib/x86_64-linux-gnu/perl/5.30.0';
installsitescript='/usr/local/bin';
iinstallsitebin='/usr/local/bin';
installsiteman3dir='/usr/local/man/man3';
installsiteman1dir='/usr/local/man/man1';