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

如何获取src目录下各Python脚本中导入的唯一模块列表

获取Python项目中所有导入的唯一模块列表

项目情况

我的项目代码都在src文件夹下,结构大致如下:

├── src                <- 项目源码目录
│   │
│   ├── data           <- 数据下载/生成脚本
│   │
│   ├── features       <- 原始数据转特征脚本
│   │
│   ├── models         <- 模型训练与预测脚本

以data文件夹为例,里面有多个.py脚本:

├── data               
   │
   ├── create_dataframe.py
   ├── imputation.py
...

需求

我要提取所有.py脚本里导入的唯一第三方模块名称,不用管版本。比如:

  • create_dataframe.py代码:
    import pandas as pd
    
  • imputation.py代码:
    import pandas as pd
    import numpy  as np
    from   tqdm import tqdm
    

期望得到这样的输出:

Output: ['pandas', 'numpy', 'tqdm']

实现方法

方法一:自己写Python脚本解析

可以写一个递归遍历文件、匹配导入语句的脚本,直接拿到结果:

import os
import re

def get_file_imports(file_path):
    modules = set()
    # 匹配两种导入格式的正则
    import_re = re.compile(r'^\s*import\s+(\w+)\s*(?:as\s+\w+)?', re.MULTILINE)
    from_import_re = re.compile(r'^\s*from\s+(\w+)\s+import', re.MULTILINE)
    
    with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
        content = f.read()
        # 提取import xxx的模块
        modules.update(import_re.findall(content))
        # 提取from xxx import的模块
        modules.update(from_import_re.findall(content))
    return modules

def collect_all_modules(root_dir):
    all_modules = set()
    # 递归遍历所有.py文件
    for dirpath, _, filenames in os.walk(root_dir):
        for file in filenames:
            if file.endswith('.py'):
                file_path = os.path.join(dirpath, file)
                all_modules.update(get_file_imports(file_path))
    # 转成排序后的列表返回
    return sorted(list(all_modules))

if __name__ == '__main__':
    target_dir = './src'
    result = collect_all_modules(target_dir)
    print(f"Output: {result}")

注意点

  • 脚本会自动跳过编码异常的文件,避免中断
  • 只提取顶级模块名(比如from sklearn.ensemble import RandomForest只会提取sklearn)
  • 集合自动去重,最后输出排序后的列表

方法二:用第三方工具pipreqs快速生成

如果不想自己写代码,用pipreqs工具更省心:

  1. 先安装工具:
pip install pipreqs
  1. 在项目根目录执行命令(指定src目录,忽略版本号):
pipreqs ./src --encoding=utf-8 --no-version

执行后会在src目录下生成requirements.txt,内容就是去重后的模块名:

pandas
numpy
tqdm

优势

  • 能处理更复杂的导入场景(比如嵌套模块、相对导入自动过滤)
  • 不需要自己写正则匹配,工具已经做好了逻辑处理

内容的提问来源于stack exchange,提问作者Will

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:30:59