想要改善一个相当大的Python项目的质量。我对PyLint提供的警告类型感到满意,但是它们太多了,在大型组织中难以强制执行。此外,我认为某些代码比其他代码更关键/敏感,涉及下一个错误可能出现的位置。例如,我想花更多时间验证一个被100个模块使用的库方法,而不是2年前最后一次接触并且可能不会在生产中使用的脚本。另外,知道经常更新的模块也很有趣。
是否有人熟悉Python或其他工具,可以帮助进行这种类型的分析?
想要改善一个相当大的Python项目的质量。我对PyLint提供的警告类型感到满意,但是它们太多了,在大型组织中难以强制执行。此外,我认为某些代码比其他代码更关键/敏感,涉及下一个错误可能出现的位置。例如,我想花更多时间验证一个被100个模块使用的库方法,而不是2年前最后一次接触并且可能不会在生产中使用的脚本。另外,知道经常更新的模块也很有趣。
是否有人熟悉Python或其他工具,可以帮助进行这种类型的分析?
恐怕你大部分时间都得靠自己。
如果你有一套不错的测试,就看测试覆盖率和无用代码。
如果你有一个不错的分析设置,就用它来一窥哪些被使用得更多。
最后,似乎你更感兴趣的是扇入/扇出分析,我不知道有哪些好的Python工具,主要是因为对于动态语言而言静态分析极其不可靠,至今我还没有看到任何统计分析工具。
我认为这些信息在JIT编译器中可以获取——缓存(已编译)的内容(函数、参数类型)是最常用的。关于是否可以从PyPy等工具中获取这些数据,我真的毫不清楚。
源代码控制工具可以很好地指示频繁更新的模块 - 这通常表示故障点。
如果您没有源代码控制,但项目是从共享位置运行的,请删除所有pycache文件夹或.pyc文件。随着时间/使用不足,请观察哪些文件被重新创建以指示它们的使用。
通过特定入口点运行时打印的Python导入进行分析。
python -v entry_point
可以提供一些有关使用的模块的见解。但是,如果您已知道访问点,应该尝试使用覆盖率模块。
对于更具侵入性的解决方案,请考虑设置项目范围的日志记录。您可以轻松记录指标,即使在分布式程序中也是如此。
profiler
来完成。sys.setprofile
:它允许你安装一个分析器函数。profiling
关键字。Pylint有时会发出警告,经过仔细考虑后发现这些警告是不合理的。在这种情况下,如果代码无法重构以避免触发警告,则使用特殊的#pylint: disable=X0123
注释非常有用(其中X0123是实际错误/警告消息编号)。
我想强调Hardbyte提到的使用源代码控制日志查看哪些文件经常更改的方法。
如果您正在使用安装了find
、grep
和sort
的系统,则可以使用以下方法检查哪个文件导入了什么;
find . -name '*.py' -exec grep -EH '^import|^from .* import' {} \+| sort |less
查找所有文件中最受欢迎的导入内容;
find . -name '*.py' -exec grep -Eh '^import|^from .* import' {} \+ | sort | less