如何自动检测未使用代码并构建仅含推理功能的轻量Python Wheel?
可行的工具方案
你可以结合以下现成工具实现需求,无需自行开发复杂分析逻辑:
1. Coverage.py(运行时依赖分析)
这是最实用的方案,通过运行目标函数追踪实际用到的代码:
- 安装后,编写简单测试脚本调用需保留的5个推理相关函数
- 执行
coverage run your_test_script.py,追踪所有被执行的代码文件 - 用
coverage report查看必要文件列表,基于此修改setup.py或MANIFEST.in,只保留这些文件,排除训练、测试等无关模块
2. Autoflake/Pycln(清理无用代码)
在保留的文件中自动移除未使用的导入、变量和函数:
- 对目标文件执行
autoflake --remove-all-unused-imports --in-place your_module.py - 或用
pycln your_module.py,精准清理未使用的导入与局部变量
3. Deadcode(进一步精简代码)
识别保留文件中未被调用的函数、类和变量,完成最后一步精简:
- 执行
deadcode --exclude=tests,training your_package/,输出所有未使用的代码元素,批量或手动移除冗余内容
4. Modulegraph(静态依赖分析)
若不想运行代码,可使用PyInstaller底层的静态分析工具:
- 安装后,编写几行简单代码分析目标函数的依赖模块:
from modulegraph import modulegraph mg = modulegraph.ModuleGraph() mg.run_script("path/to/your_target_functions.py") # 导出所有依赖的模块路径 for node in mg.flatten(): if hasattr(node, 'filename'): print(node.filename)
- 基于输出的文件列表筛选需保留的代码
这些工具组合使用,能自动化完成从指定目标函数到生成极简Wheel包的流程,比手动用sed更可靠,代码变更后只需重新运行分析即可更新包内容。
内容的提问来源于stack exchange,提问作者BIOStheZerg
相关产品推荐
相关产品推荐

