本文目录导读:

Python 环境
获取所有已加载模块
import sys
# 方法1:通过 sys.modules
loaded_modules = list(sys.modules.keys())
print("已加载模块数量:", len(loaded_modules))
print("前10个模块:", loaded_modules[:10])
# 方法2:查看详细信息
for name, module in list(sys.modules.items())[:5]: # 只显示前5个
print(f"模块名: {name}, 类型: {type(module).__name__}")
获取特定类型的模块
import sys
import types
# 只获取用户定义的模块(非内置)
user_modules = [
name for name, mod in sys.modules.items()
if hasattr(mod, '__file__') and mod.__file__ is not None
]
print("用户模块:", user_modules)
Node.js 环境
获取所有已加载模块
// 方法1:通过 require.cache
const loadedModules = Object.keys(require.cache);
console.log("已加载模块:", loadedModules);
// 方法2:获取详细信息
for (const [id, module] of Object.entries(require.cache)) {
console.log(`模块ID: ${id}`);
console.log(`模块文件: ${module.filename}`);
console.log(`是否已加载: ${module.loaded}`);
}
获取模块树状结构
function getModuleTree() {
const moduleTree = {};
for (const [id, module] of Object.entries(require.cache)) {
const parts = id.split('/');
let current = moduleTree;
for (const part of parts) {
if (!current[part]) {
current[part] = {};
}
current = current[part];
}
}
return moduleTree;
}
console.log(JSON.stringify(getModuleTree(), null, 2));
PowerShell 环境
获取所有加载的模块
# 方法1:获取所有模块
Get-Module
# 方法2:获取详细列表
Get-Module | Select-Object Name, Version, ModuleType, ExportedCommands
# 方法3:获取已加载但未显式导入的模块(自动加载)
Get-Module -ListAvailable | Where-Object { $_.ModuleBase -like "*WindowsPowerShell*" }
获取加载的.NET程序集
[System.AppDomain]::CurrentDomain.GetAssemblies() |
Select-Object FullName, Location, IsDynamic
Ruby 环境
# 获取所有已加载的模块
loaded_features = $LOADED_FEATURES
puts "已加载文件数量: #{loaded_features.length}"
puts loaded_features.first(10) # 显示前10个
# 获取当前加载的Gem
require 'rubygems'
Gem.loaded_specs.each do |name, spec|
puts "#{name} (#{spec.version})"
end
通用脚本(跨平台)
#!/usr/bin/env python3
"""
跨平台模块检测脚本
"""
import sys
import os
def get_loaded_modules():
"""获取当前环境所有已加载模块"""
modules_info = {
'python': [],
'node': [],
'powershell': [],
'ruby': []
}
# Python
if 'python' in sys.executable or 'python3' in sys.executable:
for name, mod in sys.modules.items():
if mod:
modules_info['python'].append({
'name': name,
'file': getattr(mod, '__file__', None),
'version': getattr(mod, '__version__', None)
})
return modules_info
if __name__ == "__main__":
result = get_loaded_modules()
for env, modules in result.items():
if modules:
print(f"\n{env.upper()} 环境已加载模块:")
for mod in modules[:5]: # 只显示前5个
print(f" - {mod['name']} (v{mod['version'] or 'N/A'})")
注意事项
- 性能影响:获取所有模块可能会影响性能,建议只获取需要的部分
- 内存占用:大型项目可能有数千个模块,注意不要一次性全部加载到内存
- 安全考虑:某些环境可能限制访问模块信息(如浏览器环境中)
- 动态加载:有些模块是延迟加载的,可能不会在初始列表中显示
选择适合你具体环境的脚本即可,需要针对特定环境的详细用法说明吗?