簡單Modules 的配置與管理,靈活應對多版本軟件環境的需求。

?參考文檔

  • 官方手冊:https://modules.readthedocs.io

  • Modulefile 語法:modulefile — Modules documentation

Environment Modules 工具

Environment Modules 是一個環境管理工具,用于動態加載、卸載和管理不同版本的軟件環境變量(如?PATHLD_LIBRARY_PATH?等),適用于多版本軟件共存場景(如 CUDA、GCC、Python 等)。


1. 安裝 Modules

(1) 通過包管理器安裝

Ubuntu/Debian
sudo apt-get update
sudo apt-get install environment-modules
CentOS/RHEL

sudo yum install environment-modules

驗證安裝
which module  # 應返回 /usr/bin/module

(2) 源碼編譯安裝(推薦自定義路徑)

# 安裝依賴(Tcl 環境)
sudo apt-get install tcl-dev tk-dev  # Ubuntu
sudo yum install tcl-devel tk-devel  # CentOS# 下載源碼
wget https://github.com/cea-hpc/modules/releases/download/v5.3.0/modules-5.3.0.tar.gz
tar -xf modules-5.3.0.tar.gz
cd modules-5.3.0# 編譯安裝(自定義路徑)
./configure --prefix=/opt/software/modules
make
sudo make install# 配置環境變量
echo 'export MODULEPATH=/opt/software/modules/modulefiles' >> ~/.bashrc
echo 'source /opt/software/modules/init/bash' >> ~/.bashrc
source ~/.bashrc

2. 初始化 Modules

(1) 臨時生效(僅當前終端)

source /usr/share/modules/init/bash # 包管理器安裝source /opt/software/modules/init/bash # 源碼安裝

(2) 永久生效(所有用戶)

# 添加到全局 profile
sudo sh -c 'echo "source /usr/share/modules/init/bash" >> /etc/profile'# 或僅當前用戶
echo 'source /usr/share/modules/init/bash' >> ~/.bashrc
source ~/.bashrc

3. Module 基本命令

命令作用
module avail查看可用模塊
module load <module>加載模塊
module unload <module>卸載模塊
module list查看已加載模塊
module purge卸載所有模塊
module show <module>顯示模塊的環境變量
module swap <old> <new>替換模塊(如切換 CUDA 版本)

4. Modulefile 編寫

(1) 默認模塊路徑

/usr/share/modules/modulefiles       # 包管理器安裝
/opt/software/modules/modulefiles    # 源碼安裝

(2) 基本結構

#%Module1.0
proc ModulesHelp { } {puts stderr "This module loads the <Software> environment"
}
module-whatis "Description of the module"# 設置變量
set version 1.0
set prefix /path/to/software# 環境變量
prepend-path PATH $prefix/bin
prepend-path LD_LIBRARY_PATH $prefix/lib
setenv SOFTWARE_HOME $prefix

Modulefile 是定義軟件環境的配置文件,采用 Tcl 語法,需放在MODULEPATH指定的路徑下。

1. 基礎語法
命令 / 語法作用示例
#%Module1.0聲明文件為 Modulefile(必須放在首行)#%Module1.0
setenv VAR VALUE設置環境變量setenv CUDA_HOME /usr/local/cuda-12.0
prepend-path PATH /dir將路徑添加到環境變量開頭(優先生效)prepend-path PATH /usr/local/cuda-12.0/bin
append-path PATH /dir將路徑添加到環境變量末尾append-path LD_LIBRARY_PATH /opt/lib
module-whatis "desc"模塊描述(module avail時顯示)module-whatis "CUDA 12.0 toolkit"
proc ModulesHelp {} { ... }模塊幫助信息(module help <module>時顯示)見下文示例
module load <dep>加載依賴模塊module load gcc/11.2.0
is-loaded <module>檢查模塊是否已加載if { ![is-loaded gcc/11.2.0] } { ... }
實戰案例:多版本 GCC 管理
1. 安裝 GCC 9.3.0 和 11.2.0
假設安裝路徑分別為/opt/gcc/9.3.0和/opt/gcc/11.2.0。
2. 編寫 Modulefile
# 創建gcc模塊目錄
sudo mkdir -p /usr/share/modules/modulefiles/gcc
cd /usr/share/modules/modulefiles/gcc# 編寫9.3.0版本
sudo vim 9.3.0#%Module1.0
module-whatis "GCC 9.3.0 compiler"
setenv GCC_HOME /opt/gcc/9.3.0
prepend-path PATH $GCC_HOME/bin
prepend-path LD_LIBRARY_PATH $GCC_HOME/lib64# 編寫11.2.0版本
sudo vim 11.2.0#%Module1.0
module-whatis "GCC 11.2.0 compiler"
setenv GCC_HOME /opt/gcc/11.2.0
prepend-path PATH $GCC_HOME/bin
prepend-path LD_LIBRARY_PATH $GCC_HOME/lib643. 使用與切換
module avail gcc  # 查看可用版本
module load gcc/9.3.0  # 加載9.3.0
gcc --version  # 驗證版本
module swap gcc/9.3.0 gcc/11.2.0  # 切換到11.2.0
gcc --version  # 驗證切換成功
module purge  # 卸載所有模塊

5. 高級用法

?條件加載

# 僅在加載時執行
if { [module-info mode load] } {puts stderr "Loading module..."
}# 僅在卸載時執行
if { [module-info mode remove] } {puts stderr "Unloading module..."
}

6. 常見問題

  1. module avail不顯示模塊

    • 檢查 Modulefile 是否放在MODULEPATH路徑下;
    • 檢查文件名 / 目錄權限(確保可讀,chmod 644 <modulefile>);
    • 檢查#%Module1.0是否放在首行(語法要求)。
  2. 加載模塊后命令無效

    • 檢查 Modulefile 中PATHLD_LIBRARY_PATH是否指向正確路徑(可通過module show <module>確認);
    • 確認軟件實際安裝路徑與 Modulefile 中一致(路徑不存在會導致失效)。
  3. 依賴模塊加載失敗

    • 檢查依賴模塊是否存在(module avail <dep>);
    • 依賴邏輯語法錯誤(如is-loaded寫成is - loaded,Tcl 語法不允許空格)。

=======拓展技巧===================================================

  • 模塊繼承:通過include命令復用其他 Modulefile(如include /path/to/base.module);
  • 條件適配:根據系統架構(如x86_64/arm64)設置不同路徑:
    if { $::tcl_platform(machine) eq "x86_64" } {prepend-path PATH /opt/app/x86/bin
    } else {prepend-path PATH /opt/app/arm/bin
    }
    

  • 批量管理:通過module save <name>保存當前模塊集合,module restore <name>恢復(如保存常用環境)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92821.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92821.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java內部類-匿名內部類

匿名內部類必須有一個已經存在的類或者接口

上篇:《排序算法的奇妙世界:如何讓數據井然有序?》

個人主頁&#xff1a;strive-debug 排序算法精講&#xff1a;從理論到實踐 一、排序概念及應用 1.1 基本概念 **排序**&#xff1a;將一組記錄按照特定關鍵字&#xff08;如數值大小&#xff09;進行遞增或遞減排列的操作。 1.2 常見排序算法分類 - **簡單低效型**&#xff…

2025.8.6 圖論(1)Solution

2025.8.6 圖論&#xff08;1&#xff09;Solution 割點 學習資料&#xff0c;在 csdn 或洛谷上看都行。是模板題題解&#xff08;之一&#xff09;。 T1&#xff1a;Atserckcn與逃離恐怖老師。 題意簡述&#xff1a;從一個圖中選定一個點&#xff0c;使得刪除這個點后圖不連…

OpenBayes 教程上新丨一鍵部署 gpt-oss-20b,實測開源推理模型新 SOTA,性能直逼 o3?mini

時隔 6 年&#xff0c;自 GPT-2 以來&#xff0c;OpenAI 終于再度發布開源大模型——gpt-oss-120b 和 gpt-oss-20b&#xff0c;前者以千億級參數專為復雜推理與知識密集型場景設計&#xff0c;后者則更適合低延遲、本地或專業垂直領域使用&#xff0c;可在消費級硬件&#xff0…

nlp-句法分析

目錄 一、句法概述 1、成分語法理論概述 &#xff08;1&#xff09;分析過程 &#xff08;2&#xff09;缺點 2、依存語法理論概述 &#xff08;1&#xff09;依存關系、配價模式 &#xff08;2&#xff09;分類 &#xff08;3&#xff09;優勢&#xf…

linux磁盤加密

在Linux中&#xff0c;磁盤加密是一種保護數據不被未授權訪問的方法。有多種工具和策略可以實現磁盤加密&#xff0c;包括使用Linux內核的內置功能&#xff0c;如dm-crypt&#xff0c;以及使用更高級的解決方案&#xff0c;如LUKS&#xff08;Linux Unified Key Setup&#xff…

大數據架構演變之路

目錄 一、各階段的架構簡介 二、各個架構的詳細解釋 1. 傳統離線架構 2.1. Lambda架構-離線數倉分析實時鏈路分析 2.2. Lambda架構-離線數倉實時數倉 3. Kappa/流批一體架構 4. 湖倉一體架構 三、總結 一、各階段的架構簡介 技術架構 核心驅動(核心需求) ?關鍵技術 …

STM32 HAL庫驅動0.96寸OLED屏幕

STM32 HAL庫驅動0.96寸OLED屏幕 項目概述 本項目使用STM32 HAL庫為0.96寸OLED屏幕編寫驅動程序。OLED屏幕通過I2C接口與STM32單片機通信&#xff0c;實現文本、數字和圖形的顯示功能。 項目倉庫地址&#xff1a;STM32_Sensor_Drives 硬件連接 OLED屏幕通過I2C接口與STM32連…

橫向越權:修改參數訪問不屬于自己的數據

一、什么是橫向越權定義 橫向越權&#xff08;Horizontal Privilege Escalation&#xff09;是指 同一權限級別的用戶&#xff0c;通過篡改請求參數或資源標識&#xff0c;訪問本不屬于自己的數據或功能。例子 假設一個在線商城&#xff0c;用戶 A 訪問訂單詳情的 URL&#xff…

攻擊實驗(ARP欺騙、MAC洪范、TCP SYN Flood攻擊、DNS欺騙、DHCP餓死)

實驗一 ARP欺騙一、拓撲二、實驗準備、1.設置終端漏洞靶機集合選擇需要的數量和鏡像打開設備上的驅動精靈安裝網卡安裝成功后查看IP地址、網關信息等。三、實驗步驟1.實驗原理中間人&#xff08;攻擊者&#xff09;在終端與網關之間持續發送偽造的 ARP 應答包&#xff0c;雙向欺…

VSCode 禁用更新檢查的方法

通過設置菜單禁用 這是最直接和推薦的方法&#xff0c;可以永久禁用自動更新&#xff1a; 打開 VSCode。點擊左下角的齒輪圖標&#xff0c;然后選擇“設置”。或者通過菜單欄“文件” > “首選項” > “設置”進入。在頂部的搜索框中輸入“update”。找到“Update: Mode”…

Flutter - 應用啟動/路由管理

一、應用入口1. 初始化 Flutter 底層綁定 &#xff0c;運行 App。import package:flutter/material.dart; import package:flutter_base/Application.dart;void main() {// 確保綁定初始化WidgetsFlutterBinding.ensureInitialized();// App初始化Application.init(); }2. 注冊…

MySQL 數據操作全流程:創建、讀取、更新與刪除實戰

MySQL系列 文章目錄MySQL系列前言一、Create(創建)并插入數據1.1 單行數據 全列插入1.2 多行數據 指定列插入1.3 插入沖突時同步更新1.4 沖突時替換二、Retireve讀取數據2.1 全列查詢2.2 查詢指定列2.3 查詢字段為表達式2.4 結果去重 DISTINCT2.5 where條件篩選2.6 order by語…

SQL約束:數據完整性的守護者

在SQL中&#xff0c;約束&#xff08;Constraints&#xff09; 是作用于數據庫表字段上的規則&#xff0c;用于強制保證數據的完整性、準確性和一致性。當插入、更新或刪除數據時&#xff0c;約束會自動驗證操作是否符合規則&#xff0c;若違反則拒絕執行。 以下是SQL中常見的約…

Springboot-vue 地圖展現

在很多社區管理系統中&#xff0c;地圖展示功能是一個重要的模塊&#xff0c;它能直觀地呈現小區的地理位置分布。本文將詳細梳理從前端觸發請求到地圖上展示小區數據的完整流程&#xff0c;幫助大家理解前后端協同工作的具體細節。一、前端觸發&#xff1a;頁面加載與地圖初始…

Vue 3 登錄組件

Login.vue 組件詳細分析整體架構 Vue 3 登錄組件&#xff0c;采用 Composition API Element Plus UI 庫&#xff0c;實現了完整的用戶認證界面。 模板結構分析 1. 容器布局 <div class"login-container"><el-card class"login-card"><!-- …

小結: getSpringFactoriesInstances從 `spring.factories` 文件中加載和實例化指定類型的類

getSpringFactoriesInstances 方法工作原理 getSpringFactoriesInstances 是 Spring Boot 框架中的一個核心方法&#xff0c;用于從 spring.factories 文件中加載和實例化指定類型的類。這是 Spring Boot 實現自動配置和插件化擴展的關鍵機制。 1. 基本功能 該方法的主要作用是…

selenium SessionNotCreatedException問題解決辦法

在上周有一臺服務器重啟之后&#xff0c;Chrome瀏覽器也自動升了級&#xff0c;原本能夠正常使用的自動化辦公程序突然沒法用了&#xff0c;出現了下面的報錯提示。codes/addCancelBdld.py:980: DeprecationWarning: use options instead of chrome_optionsdriver webdriver.C…

SOAP HTTP Binding

SOAP HTTP Binding 引言 SOAP(Simple Object Access Protocol)是一種輕量級、簡單的協議,用于在網絡上交換結構化信息。它廣泛應用于Web服務中,用于實現不同系統和應用程序之間的通信。SOAP HTTP Binding是SOAP協議的一種實現方式,它允許使用HTTP協議來傳輸SOAP消息。本…

GPT-5免費使用教程(國內可訪問)

GPT-5來了&#xff0c;壓力給到各大AI模型廠商&#xff1f; 北京時間2025年8月7日&#xff0c;OpenAI 推出兩款開源模型 gpt-oss-120b / 20b&#xff0c;性能逼近 o4-mini/o3-mini&#xff0c;一時間火爆AI圈&#xff1b;但這好像只是一道開胃小菜&#xff0c;在北京時間2025年…