“模块加载”命令不起作用

uza*_*nan 13 12.04

我正在尝试使用以下命令编译“全球气候模型”。

module unload pgi gcc
module load gcc/4.6.3 pgi/11.8
Run Code Online (Sandbox Code Playgroud)

当我执行它们时,终端回复command not found.

我究竟做错了什么?这样做的正确方法是什么?

j08*_*lue 29

简单总结一下之前的评论和回答,补充一点第一手的安装经验:

您正在寻找环境模块module提供的命令。它是一种用于修改 shell 环境(PATH 以及别名等)的工具,对于许多多用户集群(如高性能计算集群)来说是通用的。

您得到的指令可能来自某个 HPC 集群,因为您想运行一个全球气候模型。此处阅读有关 HPC 环境模块的更多信息

现在对于一些与Ubuntu相关的事情:在 Ubuntu 下设置环境模块实际上并没有那么痛苦。对于 Ubuntu 14.10 和 Bash shell,我只用了不到 10 分钟的时间就完成了。

正如其他帖子中提到的,您可以从存储库(包environment-modules)安装环境模块。

然后你跑add.modules。它将在您的 shell 初始化文件中放入几行,在这种情况下~/.bashrc

case "$0" in
          -sh|sh|*/sh)  modules_shell=sh ;;
       -ksh|ksh|*/ksh)  modules_shell=ksh ;;
       -zsh|zsh|*/zsh)  modules_shell=zsh ;;
    -bash|bash|*/bash)  modules_shell=bash ;;
esac
module() { eval `/usr/Modules/$MODULE_VERSION/bin/modulecmd $modules_shell $*`; }
#module() { eval `/usr/bin/modulecmd $modules_shell $*`; }
Run Code Online (Sandbox Code Playgroud)

您需要取消对最后一行的注释并注释掉或删除倒数第二行。这一行定义了module您正在寻找的命令。它有效地运行modulecmd bash加上你给它的参数。

我觉得这个函数实际上不是很安全,因为它评估你在参数中提供的任何东西。一些用户也许可以评论如何改进这一点。

您现在只需要创建一些包含所谓的目录modulefiles并将其添加到$MODULEPATH,例如使用module use /path/to/your/modulefiles. 有对modulefiles例子在interwebs在那里。

我发现这是一个非常方便的工具,不仅适用于多用户集群。我用它在不同的 Python 发行版之间切换。

  • 我认为这应该是这个问题的公认答案 (2认同)

Bri*_*ian 6

对于那些“略读”(看着你 Seth)的人:这不是关于内核模块的问题。这是一个关于使用名为 ENIRONMENT-MODULES 的工具操作 shell 环境变量的问题。如果您完全熟悉内核模块,您就会意识到没有名为“模块”的标准内核工具(脚本或其他)。所有模块操作工具都将模块缩写为 mod(lsmod、insmod、modprobe 等)。并且没有名为 gcc 的模块。

Environment-modules ( http://modules.sourceforge.net/ ) 是另一个用于在 shell 中切换执行环境的环境工具。它可以帮助需要在同一台机器上安装 Python 2.4 和 Python 2.7 的人。或者它可以帮助人们管理 Intel v. GNU 编译器和库。

不幸的是,environment-modules 不是 Ubuntu 12.04 LTS 的包。

选项包括从源代码安装(按照上面的链接)、升级到 14.04 LTS 或查看 deb 文件。在这三个中,我会从源代码安装。deb 文件依赖于 libtcl8.6,它处于同样的困境,在 12.04LTS 上不可用。


Hen*_*eck 4

您可能正在尝试使用您的计算机上未安装的软件包。当然,我不能真正确定,但我的猜测是您正在尝试使用environment-modules。如果这是正确的,您可以从标准 Ubuntu 存储库安装环境模块。

但请注意,环境模块是一个相当古老的程序。主页上注明了辅助工具的最新更新日期为 2011 年,版权声明的版本不超过 1999 年。因此,无法保证该软件包能够与当前的 Ubuntu 版本完美配合。可能是这样,但你不能确定。

  • 设置起来非常痛苦,但它运行得非常好,并且是多用户集群的“事实上的”标准。 (2认同)

Oli*_*Oli 0

module load这不是不工作的情况,module load也不是 Ubuntu 中的标准命令。

如果您正在尝试加载现有模块,sudo modprobe <modulename>这就是您正在寻找的命令。您可以使用rmmodmodprobe -r卸载模块。

  • 他尝试使用环境模块程序(通常安装在集群上)来管理不同编译器、MPI 实现等的环境变量。*不*加载内核模块。 (4认同)