我已经将我的应用程序打包为Perl模块,该模块无法使用cpan
或cpanm
命令安装。问题是,这些命令—当不是作为根运行时—将必要的模块安装到~/perl5目录中。但是,我的~/perl5目录没有包含在@INC
这将导致以下令人困惑的cpanm输出:
$ cpanm --installdeps .
--> Working on .
Configuring my-module-0.001 ... OK
==> Found dependencies: Image::Size
--> Working on Image::Size
Fetching http://www.cpan.org/authors/id/R/RJ/RJRAY/Image-Size-3.232.tar.gz ... OK
Configuring Image-Size-3.232 ... OK
Building and testing Image-Size-3.232 ... OK
Successfully installed Image-Size-3.232
! Installing the dependencies failed: Module 'Image::Size' is not installed
! Bailing out the installation for my-module-0.001.
1 distribution installed
如您所见,它成功地下载、测试和安装了Image::Size模块,但随后试图使用它却失败了。
我知道我可以通过将环境变量$PERL5LIB设置为"~/perl5/lib/perl5"并将"~/perl5/bin"添加到我的$PATH来解决这个问题,但是我真的很想知道这种情况最初是如何出现的。我想保持我的应用程序的用户的安装说明尽可能简单,手动修改环境变量不是我打算指导他们的事情。
如果使用bash,可以安装local::lib并在.bashrc文件中添加如下内容
# adds $HOME/perl5/bin to PATH
[ $SHLVL -eq 1 ] && eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
那应该能解决你的问题。问题在于本地系统的配置方式,所以不要把Dist::Zilla放到不需要的地方。
这是我自己对这个问题的解决方案。我切换到Dist::Zilla,并为我的用户提供了以下安装说明:
Installation instructions
=========================
To install this program you need Dist::Zilla, which can be installed
by running the following command as root:
cpan Dist::Zilla
After that, make sure you're in directory where this INSTALL file is,
and run the following command as root:
dzil install