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

如何生成仅包含脚本实际依赖模块的requirements.txt文件?

生成仅包含实际所需模块的requirements.txt方法

不用再手动删pip freeze的冗余依赖了,推荐几种靠谱的方法:

1. 用pipreqs自动扫描代码

这是最常用的工具,专门扫描项目里实际导入的模块:

  • 先安装:pip install pipreqs
  • 到项目根目录执行:pipreqs .
  • 直接生成的requirements.txt只包含代码里用到的第三方模块,自动过滤掉没用到的包
  • 注意:如果代码里有动态导入(比如用importlib.import_module),可能需要手动补全漏掉的模块

2. 用pigar生成带版本建议的依赖

功能比pipreqs更全面,能识别更多导入场景,还会给出版本适配建议:

  • 安装:pip install pigar
  • 项目根目录执行:pigar
  • 生成的文件不仅有依赖,还会标注推荐的版本,甚至能检测出过时的依赖包

3. 用干净虚拟环境生成

不想装工具的话,用虚拟环境确保依赖绝对纯净:

  1. 创建新虚拟环境:python -m venv myenv
  2. 激活环境:Windows用myenv\Scripts\activate,Linux/macOS用source myenv/bin/activate
  3. 一步步安装让脚本正常运行的所有模块
  4. 执行pip freeze > requirements.txt,出来的就是完全必要的依赖

4. 自己写简单脚本扫描(Python 3.8+)

如果不想装第三方包,写个小脚本搞定:

import os
import ast
import sys

def get_required_modules(project_path):
    imports = set()
    # 遍历所有py文件
    for root, _, files in os.walk(project_path):
        for file in files:
            if file.endswith(".py"):
                file_path = os.path.join(root, file)
                try:
                    with open(file_path, "r", encoding="utf-8") as f:
                        tree = ast.parse(f.read())
                        # 提取所有导入的模块
                        for node in ast.walk(tree):
                            if isinstance(node, ast.Import):
                                for alias in node.names:
                                    imports.add(alias.name.split(".")[0])
                            elif isinstance(node, ast.ImportFrom):
                                if node.module:
                                    imports.add(node.module.split(".")[0])
                except SyntaxError:
                    continue
    # 过滤标准库模块
    std_modules = set(sys.stdlib_module_names)
    return imports - std_modules

if __name__ == "__main__":
    required = get_required_modules(".")
    with open("requirements.txt", "w") as f:
        f.write("\n".join(required))

把这个脚本放在项目根目录运行,会自动扫描所有py文件,提取第三方模块,排除标准库后写入requirements.txt。缺点是处理动态导入这类复杂场景可能不准,适合简单项目。

内容的提问来源于stack exchange,提问作者mason-lancaster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:31:35