我正在尝试在 Google Colab(Ubuntu 环境)中安装和加载几个 Perl 模块。我使用 CPAN 安装它们,然后使用环境模块。我绝对需要使用环境模块来加载它们(例如,我的脚本运行的命令之一是module load Perl
),但如果有更好的选择,我不需要使用 CPAN 来安装它们。
首先我使用 CPAN 安装了 Perl 模块:
PERL_MM_USE_DEFAULT=1 cpan GD ExtUtils::PkgConfig DBI DBD::mysql DBD::SQLite Capture::Tiny Exporter Log::Message::Simple Getopt::Long \
List::Util List::MoreUtils IO::File XML::Writer XML::LibXML XML::Parser XML::LibXML::Reader \
Data::Dumper File::Slurp JSON Storable Scalar::Util Array::Utils Config::IniFiles \
Statistics::Descriptive GD::Graph::boxplot
然后,跑步perldoc perllocal
给了我以下收获:
Tue Jul 28 01:16:13 2020: "Module" App::cpanminus
* "installed into: /usr/local/share/perl/5.26.1"
* "LINKTYPE: dynamic"
* "VERSION: 1.7044"
* "EXE_FILES: bin/cpanm"
Tue Jul 28 01:16:30 2020: "Module" Net::SSLeay
* "installed into: /usr/local/share/perl/5.26.1"
* "LINKTYPE: dynamic"
* "VERSION: 1.88"
* "EXE_FILES: "
Tue Jul 28 01:16:32 2020: "Module" Mozilla::CA
* "installed into: /usr/local/share/perl/5.26.1"
* "LINKTYPE: dynamic"
* "VERSION: 20200520"
* "EXE_FILES: "
...
但是,当我运行source /etc/profile.d/modules.sh && module avail
列出可供加载的模块时,我刚刚安装的模块没有显示出来,我只得到以下内容(不确定为什么同一件事会打印两次):
------------------------ /usr/share/modules/modulefiles ------------------------
dot module-git module-info modules null use.own
------------------------ /usr/share/modules/modulefiles ------------------------
dot module-git module-info modules null use.own
因此我认为我需要添加/usr/local/share/perl/5.26.1
到modulepath
以便它找到已安装的模块。但是当我尝试使用module use --append /usr/local/share/perl/5.26.1
并再次运行时module avail
,我得到与上面相同的输出,表明该目录尚未添加。
答案1
环境模块与模块文件一起工作,模块文件是用 Tcl 编写的描述环境变化的脚本(例如向环境变量添加目录)。
您可以查看/usr/share/modules/modulefiles/dot
您的设置来查看模块文件的示例。
在您的情况下,您安装了 Perl 模块,但是一旦安装就没有模块文件可以在环境模块上下文中桥接它们。
这里可能混淆了环境模块和 Perl 模块。环境模块可能有助于定义环境变量以访问您已安装的 perl 模块(例如,通过将目录添加/usr/local/share/perl/5.26.1
到PERL5LIB
环境变量,请参阅perllocal
下面的 modulefile 示例),但环境模块不会让您看到您已安装的 Perl 模块。
/usr/share/modules/modulefiles/perllocal
:
#%Module
append-path PERL5LIB /usr/local/share/perl/5.26.1