Ghytro

Untitled

Oct 7th, 2021
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. from argparse import ArgumentParser
  2. from pkg_resources import working_set
  3. from graphviz import Digraph
  4.  
  5.  
  6. def view_deps_graph(package):
  7. visited = set()
  8. visited.add(str(package).split()[0])
  9. deps_graph = Digraph(f"{str(package).split()[0]}_deps", filename=f"{str(package).split()[0]}_deps.gv")
  10. dfs(package, visited, deps_graph)
  11.  
  12.  
  13. def dfs(current_node, visited: set, deps_graph):
  14. for dependency in [str(d).split(">=")[0].split("==")[0].split("<=")[0] for d in current_node.requires()]:
  15. if dependency not in visited:
  16. deps_graph.edge(dependency, str(current_node).split()[0])
  17. visited.add(dependency)
  18. dfs(working_set.by_key[dependency], visited, deps_graph)
  19.  
  20.  
  21. def main():
  22. parser = ArgumentParser(description="Get the graph of dependencies for any python package in GraphViz format")
  23. parser.add_argument("package_name", help="Name of the package to get dependencies")
  24. package_name = parser.parse_args().package_name
  25. package = working_set.by_key[package_name]
  26. view_deps_graph(package)
  27.  
  28. if __name__ == "__main__":
  29. main()
  30.  
Advertisement
Add Comment
Please, Sign In to add comment