解析python安装文件

时间:2012-11-04 15:20:04

标签: python

我需要编写一个python脚本来读取和解析setup python文件。 setup包含一些变量和函数调用。

示例:

setup.py
x = 5
mylist [ 1, 2, 3]
myfunc(4)
myfunc(5)
myfunc(30)


main.py
.
parse_setup('setup.py')
.

我想解析设置文件并“查看”定义了哪种变量以及调用哪种函数。 由于用python编写的安装文件,我认为最简单的方法是动态导入安装文件(动态因为安装文件路径是main的输入)。

问题是导入失败,因为myfucn()中调用的setup.py未定义。

我有办法拦截myfunc()中的setup.py次来电并执行main.py中定义的我自己的功能吗?

如果我想要执行的函数是成员函数怎么办?

任何人都可以想到一个更好的方法来提取设置文件中的数据,我真的不想逐行阅读。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您的setup.py文件包含以下Python语句:

x = 5
mylist = [ 1, 2, 3]
y = myfunc(4)
z = myfunc(x)

你可以在main.py中做同样的事情来找出它定义的内容:

def myfunc(n):
    return n**2

def parse_setup(filename):
    globalsdict = {'__builtins__': None, 'myfunc': myfunc}  # put predefined things here
    localsdict = {}  # will be populated by executed script
    execfile(filename, globalsdict, localsdict)
    return localsdict

results = parse_setup('setup.py')
print results  # {'y': 16, 'x': 5, 'z': 25, 'mylist': [1, 2, 3]}

答案 1 :(得分:0)

如果setup.py文件是有效的python,你可以使用execfile()或import()。

execfile接近你似乎正在寻找的东西。

setup.py

def function(): print "called"

main.py

execfile("setup.py")
function() # will print called

http://docs.python.org/2/library/functions.html#execfile

再次阅读你的问题之后,一个更好的例子可能是:

setup.py

func("one")
func("two")

main.py

def func(s): print s
execfile("setup.py") 
# will print:
# one
# two

请注意,必须在定义函数后完成文件加载。