Linux 如何找出并控制本地存储Perl模块的位置?

Linux 如何找出并控制本地存储Perl模块的位置?,linux,perl,build,perl-module,Linux,Perl,Build,Perl Module,需要下载、编译和安装一些Perl模块,如DBI 我正在连接到一台远程生产测试计算机,我只有本地用户密码(没有root,原因很明显)。我已经使用wget下载了一些我需要的外部模块,比如DBI,并将这些模块解压成~/modules/DBI-这样的目录 通常,在为Linux编译某些东西时,您运行configure以在安装之前预配置所有内容;它的一个开关是--prefix=,它控制编译的可执行文件和所有编译的依赖项最终将在哪里结束 但是对于Perl模块,您不运行configure,因此我的第一个问题是:

需要下载、编译和安装一些Perl模块,如
DBI

我正在连接到一台远程生产测试计算机,我只有本地用户密码(没有root,原因很明显)。我已经使用
wget
下载了一些我需要的外部模块,比如
DBI
,并将这些模块解压成
~/modules/DBI-
这样的目录

通常,在为Linux编译某些东西时,您运行
configure
以在安装之前预配置所有内容;它的一个开关是
--prefix=
,它控制编译的可执行文件和所有编译的依赖项最终将在哪里结束

但是对于Perl模块,您不运行
configure
,因此我的第一个问题是:

  • 运行
    make
    时,是否可以控制编译的模块(例如
    DBI.pm
    )的位置?如果是,怎么做
否则,我至少需要更新
@INC
,以便我可以参考模块;所以我的第二个问题是:

  • 当我运行
    make
    时,如何找出已编译模块的位置

编译后我不能发布
makeinstall
,而且,有人要求我不要这样做。(我被要求设计脚本,使其不依赖于标准系统路径中的外部模块。)

perl模块应该与发行版的系统一起安装,就像您使用gentoo或pkg_加载项BSD等一样,或者使用CPAN。不要做你正在做的事情,那会让你和整个系统感到困惑

perl -MCPAN -e "install DBI"
您可以使用在自定义目录中安装Perl模块。这样安装的模块可以从Perl脚本中使用:

use local::lib '/path/to/custom/directory';  # Custom modules can be `use`d from hereon
使用
-l
-l
标志时在内部使用。要在当前目录中安装模块,请执行以下操作:

cpanm -l. DBI

安装目录是在生成模块的makefile时设置的。每个模块都带有一个
Makefile.PL
,必须运行它来构建Makefile,并考虑当前的Perl配置
Makefile.PL
有一个选项
PREFIX
,该选项说明将在哪里安装构建,因此在解包模块的分发和
cd
解包到解包目录后,您可以说

perl Makefile.PL PREFIX=/module/directory/path
make test
make install
Perl文档-read
perldoc perlmodinstall
中描述了此过程。您可以进入CPAN shell并使用“o”(小写)操作,它允许您更改传递到
makefile.PL
的选项,但我认为手动构建/测试/安装更为简单,并使您能够更好地控制该过程

记得加上

use lib qw(/module/directory/path);

以确保Perl在新目录中搜索模块。

我希望您不介意--我已经冒昧地缩短了您的问题,以便更多的人阅读,从而有希望得到更好的答案。@ruakh,不,我不介意。我只是把它写得这么长,这样人们就不会再把事情搞混了,就像他们在我关于这个话题的其他帖子中所做的那样。这就是为什么它在开头是“OT”评论,最后是关于“这次”更好解释的评论;-)它不会尝试在标准系统路径中安装模块吗?这在Windows上可能很好,但在Linux上不行,因为Linux需要根密码……CPAN是正确的答案,它可以安装在系统范围内或您的私有目录中。详细信息请阅读手册页“cpanm-1.DBI”。这是1号还是小写字母l?“cpanm”也是Linux上标准Perl安装的一部分吗?最后,我想在~/modules中安装它们,所以我会这样做:“cd~/modules;cpanm-1.DBI”,对吗?这样它将更新@INC变量,对吗?它是字母
l
,而不是数字
1
cpanm
不是标准Perl的一部分,您必须手动安装它。要安装到
~/modules
,可以使用:
cpanm-l~/modules DBI
。在程序中:
use local::lib'~/modules'
将自动为您修改
@INC
。远程计算机上没有“cpanm”程序,我无法控制其中的内容。如何/在何处获取/安装此程序?谢谢。另外,当我读到“man cpanm”时,我没有看到任何地方有“-l”选项。它能工作吗?在上面提到的3个命令之后,我能建立依赖关系吗?也就是说,我发布它们是为了“DBI”,需要构建“DBM:mySQL”。它会找到DBI依赖项吗?Thx。@Igor:既然你接受了我的答案,它对你有用吗?您是否能够在
DBI
之上本地安装
DBD::MySQL
。对不起,我之前没有时间,但我感觉它会起作用的。今晚将进行测试并让您知道。显然,为了运行“perl Makefile.PL”,我需要访问mysql安装。而且它不可用,因为它位于不同的计算机上。事实上,为了测试脚本,我得到了一个别名来连接到DB。我想问的是,是否有可能至少安装这两个模块。如果没有什么想法可以克服?我不太熟悉编译/安装过程。。。谢谢。@Igor:如我所述,您需要从CPAN下载并解压缩模块。您可以在本地独立于主安装进行此操作。整个过程在
perldoc perlmodinstall
中描述。