在Python中映射模块导入以便于重构

2024-06-01 09:09:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆Python模块需要清理、重组和重构(有一些重复的代码,一些未使用的代码…),我想知道是否有一个工具可以绘制出哪个模块使用哪个其他模块的映射图。在

理想情况下,我想要这样的地图:

main.py
 -> task_runner.py
  -> task_utils.py
  -> deserialization.py
   -> file_utils.py
 -> server.py
  -> (deserialization.py)
  -> db_access.py

checkup_script.py
re_test.py
main_bkp0.py
unit_tests.py

。。。这样我就可以知道哪些文件可以先移动(文件_实用工具.py分贝_访问.py),哪些文件未被我的主.py所以可以删除,等等(我实际上在处理大约60个模块)

编写一个这样做的脚本可能不会很复杂(虽然import需要处理不同的语法),但我也希望我不是第一个想这样做的人(如果有人为此开发了一个工具,它可能会包括其他一些简洁的特性,比如告诉我哪些类和函数可能不是这样的)已使用)。在

你知道有什么工具(甚至是简单的脚本)来帮助代码重组吗?在

你知道我要做什么的更确切的说法吗?代码重组?在


Tags: 模块文件工具代码py脚本taskmain
3条回答

Python的^{}可以做到这一点。编写一个脚本将这些信息转换为导入图(可以用graphviz呈现),这是一个clear explanation。还有一个^{}可以为您完成所有工作(也可以使用ast!)在

您可能需要查看^{}或{a6}以了解更一般的维护任务。在

chuckmove是一个工具,它允许您递归地重写整个源树中的导入,以引用模块的新位置。在

chuckmove --old sound.utils --new media.sound.utils src

…这将下降到src,并重写导入的语句声音.utils导入media.sound.utils相反。它支持所有Python导入格式。一、 例如from x import yimport x.y.z as w

Writing a script that does this probably wouldn't be very complicated (though there are different syntaxes for import to handle),

这是微不足道的。有import和{}。要处理的两个语法。在

Do you know of a more exact term for what I'm trying to do? Code reorganization?

设计。这叫做设计。是的,你正在重构一个现有的设计,但是。。。在

规则一

不要用你所拥有的开始设计。如果你这样做,你只会“啃边”,做一些小的,有时是无关紧要的改变。在

规则二

如果你更聪明的话,用你应该拥有的东西开始设计。宽泛而清晰地思考你真正应该做什么。不管你做了什么。在

规则三

使用正确的包和模块体系结构从头开始设计。在

为此创建单独的项目。在

规则四

先测试。为新体系结构编写单元测试。如果已有单元测试,请将它们复制到新项目中。修改导入以反映新的体系结构,并重写测试以表达您的新简化。在

所有的测试都失败了,因为你没有移动任何代码。这是件好事。在

规则五

最后将代码移到新结构中。测试通过后停止移动代码。在

顺便说一句,您不需要分析导入就可以找到模块和类。旧进口和旧进口之间的纠结关系并不重要,也不需要分析。你把它扔掉了。你不需要比grep更聪明的工具。在

如果你有移动代码的冲动,你必须非常有纪律。(1) 您必须有个失败的测试,然后(2)您可以移动一些代码来通过失败的测试。在

相关问题 更多 >