You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python及Colab中无需手动配置别名映射即可打印用户导入模块的名称与版本

自动获取Colab中导入模块的名称与版本(无需手动维护别名映射)

问题背景

你现在在Colab里想要打印已导入模块的名称和版本,但之前的方案需要手动维护一个别名映射字典(比如ref_dict = {'pd': 'pandas', 'np': 'numpy'}),这种方式不仅繁琐,还容易遗漏或出错。有没有更智能的方法来实现这个需求?


优化解决方案

其实我们可以直接通过模块对象的内置属性来自动识别原模块名称,完全不需要手动维护映射表。下面分享两种实用的实现方式:

方式一:遍历全局变量识别模块对象

这种方法会自动扫描全局变量中的所有模块对象,不管你是用原名还是别名导入的,都能准确获取原模块名和版本:

import sys
import types

# 存储用户导入的模块信息:原模块名 -> 别名、版本
user_modules = {}

# 遍历全局变量,筛选出用户导入的模块
for alias, obj in globals().items():
    # 排除系统内置的特殊模块和非模块对象
    if (isinstance(obj, types.ModuleType) 
        and not alias.startswith('__') 
        and obj.__name__ not in sys.builtin_module_names):
        mod_name = obj.__name__
        # 尝试获取版本,失败则标记为不可用
        try:
            version = obj.__version__
        except AttributeError:
            version = "Not available"
        user_modules[mod_name] = {"alias": alias, "version": version}

# 格式化输出结果
print('--module name & versions imported by user--\n')
for mod_name, details in sorted(user_modules.items()):
    print(f"{mod_name} (imported as {details['alias']}): {details['version']}")

# 可选:输出系统内置模块的版本信息
print('\n-----')
system_mods = []
for name, obj in globals().items():
    if isinstance(obj, types.ModuleType) and (name.startswith('__') or obj.__name__ in sys.builtin_module_names):
        try:
            ver = obj.__version__
        except AttributeError:
            ver = "Not available"
        system_mods.append(f"{name}: {ver}")

print('\n'.join(system_mods))

方式二:用pkg_resources获取更精准的包版本

如果你需要更准确的包版本(比如某些模块属于某个大的包,直接取模块__version__可能不够准确),可以用pkg_resources(Colab环境默认已安装):

import sys
import types
import pkg_resources

user_imported = {}

for alias, obj in globals().items():
    if (isinstance(obj, types.ModuleType) 
        and not alias.startswith('__') 
        and obj.__name__ not in sys.builtin_module_names):
        mod_name = obj.__name__
        # 优先从包资源获取版本,失败则 fallback 到模块自身的__version__
        try:
            version = pkg_resources.get_distribution(mod_name).version
        except (pkg_resources.DistributionNotFound, AttributeError):
            version = obj.__version__ if hasattr(obj, '__version__') else "Not available"
        user_imported[mod_name] = {"alias": alias, "version": version}

# 输出整理后的结果
print('--module name & versions imported by user--\n')
for mod, info in sorted(user_imported.items()):
    print(f"{mod} (imported as {info['alias']}): {info['version']}")

方案优势

  • 完全自动化:不需要手动维护别名映射,不管是import pandas还是import pandas as pd都能自动识别
  • 精准筛选:区分用户导入的模块和系统内置模块,避免输出无关内容
  • 容错性强:多种方式尝试获取版本信息,减少"Not available"的情况

内容的提问来源于stack exchange,提问作者이준혁

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:08:11