列出Python文件中使用的所有第三方软件包和自己的函数

时间:2016-01-20 12:10:57

标签: python

我有很多python软件包,由我的同事写,我想编写一个工具来检查他们依赖的第三个软件包。

喜欢这个

 #it is my package, need to check,call it example.py
 #We have more than one way to import a package, It is a problem need to consider too

 from third_party_packages import third_party_function

 def my_function(arg):
    return third_party_function(arg)

该工具应该像这样工作

result = tool(example.py)
#this result should be a dict like this structure
#{"third_party_function":["my_function",]}
#Means "my_function" relies on "third_party_function"

我不知道如何做到这一点,我所能提出的这个工具的实现是将一行Python文件行作为字符串读取,并使用正则表达式进行比较。 你能给我一些建议吗?

如果您不知道我的意思,请发表评论  你的问题,我会尽快解决。  谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用ast模块解析文件,并检查所有ImportImportFrom语句。

为了给你一个想法,这是一个例子:

>>> import ast
>>> tree = ast.parse('import a; from b import c')
>>> tree.body
[<_ast.Import object at 0x7f3041263860>, <_ast.ImportFrom object at 0x7f3041262c18>]
>>> tree.body[0].names[0].name
'a'
>>> tree.body[1].module
'b'
>>> tree.body[1].names[0].name
'c'

您的脚本可以这样工作:

  1. 通过ast.parse
  2. 解析源文件
  3. 使用ast.walk()
  4. 访问每个节点
  5. 如果节点是ImportImportFrom对象,则检查名称并执行您必须执行的操作。
  6. 使用ast比正则表达式或自定义解析器更容易,更健壮。