2010-12-01 149 views
0

所以我有一个很大的项目,里面有很多模块,我想运行一些分析。我有一个配置文件模块,基本上只是提供了一个装饰器,我可以添加到一个函数来调用它时调用它。python模块导入问题

问题是,我必须将该模块导入到我拥有的几十个模块中。这很好,我猜想,但我不能推动与导入分析模块或函数的装饰器的代码到版本控制。这意味着每次我导入/导出时,我都必须添加/删除所有我的分析代码。

是否有任何类型的系统来管理此添加/删除分析代码,而无需在我的项目的每个模块中手动导入/删除模块?我们使用mercurial,但我不能真正搞乱mercurial设置或建立分支。

回答

2

你可以创建你的分析模块,使得它导入你的其它模块和诠释自己的职能:

# these are the modules you want to profile 
import foo 
import huh 

# This is a profiling function 
# yours would do something smarter 
def profile(f): 
    def gotcha(*args, **kwds): 
     print "before" 
     result = f(*args, **kwds) 
     print "after" 
     return result 
    return gotcha 

# these are the functions in those modules that you 
# want to profile. Each one is patched here instead 
# of decorated there. 
foo.bar = profile(foo.bar) 
huh.baz = profile(huh.baz) 
huh.hmm = profile(huh.hmm) 

这样你就不必修改这些模块,但如果您选择导入这个分析模块在运行时的任何地方,它会“修补”所有其他模块,如你所愿

你应该能够类似地修饰类方法。

+0

哇,这真是个好主意。我绝对认为我会试试这个 – Falmarri 2010-12-01 20:53:35

0

为什么不只是创建一个包含所有分析更改的分支,然后在想要测试时合并分支......并在之后恢复所有分支。

git使它变得更容易,它的“git stash”,但使用分支不应该更难。

+0

我想到了这一点。但也许是因为我有一种倾向,当我做任何事情时都会抛弃mercurial repo而不是推拉,我厌倦这样做> _ < – Falmarri 2010-12-01 20:32:07