【问题标题】:How do I get cpanm to use my local perl5?如何让 cpanm 使用我的本地 perl5?
【发布时间】:2019-09-05 17:18:40
【问题描述】:

我在 Mac 上,所以我当然遇到了这个huge problem with perl on the Mac,操作系统试图保护我,安装它是一场噩梦。解决方案似乎是“制作自己的 perl,而不是使用带有操作系统的 perl”,所以我已经做到了。我运行了 brew install perl,现在我的 .bashrc 中有这个

PATH="/Users/ericmueller/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/Users/ericmueller/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/Users/ericmueller/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/Users/ericmueller/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/Users/ericmueller/perl5"; export PERL_MM_OPT;
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib=$HOME/perl5)"
source ~/perl5/perlbrew/etc/bashrceval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib=$HOME/perl5)"

老实说,我不知道其中大部分是什么 ;-) 但看起来我的文件夹中有自己的 perl,而且我发现我可以运行简单的 perl 脚本,所以我想一切都很好。

所以现在我想安装 cpanminus 和 DBI。

我安装了 cpanminus (brew install cpanminus),没有错误。但是当我运行cpanm DBI 时它失败了,当我查看失败的日志时,我看到了这个:

"/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- DBI.bs blib/arch/auto/DBI/DBI.bs 644
"/usr/bin/perl" -p -e "s/~DRIVER~/Perl/g" ./Driver.xst > Perl.xsi
"/usr/bin/perl" "/System/Library/Perl/5.18/ExtUtils/xsubpp"  -typemap '/System/Library/Perl/5.18/ExtUtils/typemap' -typemap '/Users/ericmueller/.cpanm/work/1555346710.17160/DBI-1.642/typemap'  Perl.xs > Perl.xsc
mv Perl.xsc Perl.c
cc -c   -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -Os   -DVERSION=\"1.642\" -DXS_VERSION=\"1.642\"  "-I/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE"  -W -Wall -Wpointer-arith -Wbad-function-cast -Wno-comment -Wno-sign-compare -Wno-cast-qual -Wmissing-noreturn -Wno-unused-parameter Perl.c
In file included from Perl.xs:7:
./DBIXS.h:22:10: fatal error: 'EXTERN.h' file not found
#include <EXTERN.h>
         ^~~~~~~~~~
1 error generated.
make: *** [Perl.o] Error 1

这完全是愚蠢的 Mac perl 问题,问题似乎是它仍在尝试将 DBI 库(或其依赖项之一)放入 /usr/bin/大禁忌。或者它可能正在尝试使用系统 perl 进行安装,所以这也失败了。我的主文件夹中有我自己的 perl5 安装。这就是它应该放置东西并与之合作的地方。

所以,如果这是问题所在(而且我对 perl 和这类系统管理员的东西都很糟糕,所以我不能 100% 确定!),我如何让 cpanm 在我的 perl 中使用主文件夹,而不是 /usr/bin/?我不希望在 /usr/bin/ 中发生任何事情,因为那是行不通的!

** 编辑我从我的 bashrc 中删除了除 PATH 命令之外的所有内容,现在我在运行 cpanm DBI 时得到了这个

!
! Can't write to /Library/Perl/5.18 and /usr/local/bin: Installing modules to /Users/ericmueller/perl5
! To turn off this warning, you have to do one of the following:
!   - run me as a root or with --sudo option (to install to /Library/Perl/5.18 and /usr/local/bin)
!   - Configure local::lib in your existing shell to set PERL_MM_OPT etc.
!   - Install local::lib by running the following commands
!
!         cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
!
--> Working on DBI
Fetching http://www.cpan.org/authors/id/T/TI/TIMB/DBI-1.642.tar.gz ... OK
Configuring DBI-1.642 ... OK
Building and testing DBI-1.642 ... FAIL
! Installing DBI failed. See /Users/ericmueller/.cpanm/work/1555348167.22814/build.log for details. Retry with --force to force install it.

所以好消息是我肯定会在我的 /Users 文件夹中使用我的自定义 perl5 附带的 cpanm。坏消息是,我仍然遇到同样愚蠢的问题。

【问题讨论】:

  • 1) 如果您使用的是本地安装的 Perl 版本,则使用 local::lib 毫无意义。我不会将您添加到登录脚本的任何行添加到我的登录脚本中。
  • 2) 我不知道brew,但perlbrew 要求我在登录脚本中添加一些内容。我在这里没看到?
  • 好的。我应该从我的 .bashrc 中删除所有这些行吗? - 我真的不知道他们都在做什么。
  • 3) 您需要使用cpanm,该cpanm 是使用您希望使用的perl 安装的。
  • 这些行做了 3 次同样的事情,这就是告诉 Perl 将模块安装在非默认目录中(并告诉 Perl 在那里查找模块)。使用本地安装的 Perl 时,在默认目录中安装应该非常好,也更简单。

标签: macos perl homebrew cpanm


【解决方案1】:

是的...MacOS Perl 是你不应该接触的东西。

是的......你可以做到。

但是...常见的做法,https://perlbrew.pl

和 ... 安装一些闪亮的 perl

并且...按照网站上关于cpanm的说明进行操作

【讨论】:

  • “最佳实践”是模棱两可的。 pleenv 是一个评价很高的替代品
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 2015-07-27
  • 2019-09-15
  • 2019-06-26
  • 2012-09-09
  • 2014-11-03
相关资源
最近更新 更多