Package: radon
Radon is a Python tool that computes various metrics from the source code.
Radon can compute:McCabe’s complexity, i.e. cyclomatic complexityrawmetrics (these include SLOC, comment lines, blank lines, &c.)Halsteadmetrics (all of them)Maintainability Index(the one used in Visual Studio)RequirementsRadon will run fromPython 2.7toPython 3.8(except Python versions
from 3.0 to 3.3) with a single code base and without the need of tools like
2to3 or six. It can also run onPyPywithout any problems (currently PyPy
3.5 v7.3.1 is used in tests).Radon depends on as few packages as possible. Currently onlymandois
strictly required (for the CLI interface).coloramais also listed as a
dependency but if Radon cannot import it, the output simply will not be
colored.Note:Python 2.6was supported until version 1.5.0. Starting from version 2.0, it
is not supported anymore.InstallationWith Pip:$pipinstallradonIf you want to configure Radon frompyproject.tomland you run Python <3.11,
you’ll need the extratomldependency:$pipinstallradon[toml]Or download the source and run the setup file:$pythonsetup.pyinstallUsageRadon can be used either from the command line or programmatically.
Documentation is athttps://radon.readthedocs.org/.Cyclomatic Complexity ExampleQuick example:$radonccsympy/solvers/solvers.py-a-ncsympy/solvers/solvers.pyF346:0solve-FF1093:0_solve-FF1434:0_solve_system-FF2647:0unrad-FF110:0checksol-FF2238:0_tsolve-FF2482:0_invert-FF1862:0solve_linear_system-EF1781:0minsolve_linear_system-DF1636:0solve_linear-DF2382:0nsolve-C11blocks(classes,functions,methods)analyzed.Averagecomplexity:F(61.0)Explanation:ccis the radon command to compute Cyclomatic Complexity-atells radon to calculate the average complexity at the end. Note that
the average is computed among theshownblocks. If you want the total
average, among all the blocks, regardless of what is being shown, you should
use--total-average.-nctells radon to print only results with a complexity rank of C or
worse. Other examples:-na(from A to F), or-nd(from D to F).The letterin front ofthe line numbers represents the type of the block
(Fmeans function,Mmethod andCclass).Actually it’s even better: it’s got colors!Note about file encodingOn some systems, such as Windows, the default encoding is not UTF-8. If you are
using Unicode characters in your Python file and want to analyze it with Radon,
you’ll have to set theRADONFILESENCODINGenvironment variable toUTF-8.On a Continuous Integration serverIf you are looking to useradonon a CI server you may be better off withxenon. Although still experimental, it will
fail (that means exiting with a non-zero exit code) when various thresholds are
surpassed.radonis more of a reporting tool, whilexenonis a monitoring
one.If you are looking for more complete solutions, read the following sections.CodacyCodacyuses Radonby defaultto calculate metrics from the source code.Code ClimateRadon is available as aCode Climate Engine.
To understand how to add Radon’s checks to your Code Climate Platform, head
over to their documentation:https://docs.codeclimate.com/v1.0/docs/radoncoala AnalyzerRadon is also supported incoala. To add Radon’s
checks to coala, simply add theRadonBearto one of the sections in
your.coafile.CodeFactorCodeFactoruses Radonout-of-the-boxto calculate Cyclomatic Complexity.Usage with Jupyter NotebooksRadon can be used with.ipynbfiles to inspect code metrics for Python cells. Any%macros will be ignored in the metrics.NoteJupyter Notebook support requires the optionalnbformatpackage. To install, runpip install nbformat.To enable scanning of Jupyter notebooks, add the--include-ipynbflag.To enable reporting of individual cells, add the--ipynb-cellsflag.Quick example:$radonraw--include-ipynb--ipynb-cells.example.ipynbLOC:63LLOC:37SLOC:37Comments:3Singlecomments:2Multi:10Blank:14-CommentStats(C%L):5%(C%S):8%(C+M%L):21%example.ipynb:[0]LOC:0LLOC:0SLOC:0Comments:0Singlecomments:0Multi:0Blank:0-CommentStats(C%L):0%(C%S):0%(C+M%L):0%example.ipynb:[1]LOC:2LLOC:2SLOC:2Comments:0Singlecomments:0Multi:0Blank:0-CommentStats(C%L):0%(C%S):0%(C+M%L):0%LinksDocumentation:https://radon.readthedocs.orgPyPI:http://pypi.python.org/pypi/radonIssue Tracker:https://github.com/rubik/radon/issues