如果trace.py
允许打补丁,此任务很容易。
复制trace.py
(从/usr/lib/python2.7/
我的情况而言)到本地目录(例如当前目录),然后modname(path)
在该本地副本中修补该功能。该函数将目录从模块路径中删除,因此包信息会丢失。原始包含行
filename, ext = os.path.splitext(base)
可以更改为
filename, ext = os.path.splitext(path)
为了 不 删除目录。
呼叫的输出./trace.py --trace t.py
如下所示:
--- modulename: t, funcname: <module>
t.py(3): import mypackage.mymodule
--- modulename: mypackage/__init__, funcname: <module>
__init__.py(1): --- modulename: mypackage/mymodule, funcname: <module>
mymodule.py(1): print 42
42
t.py(5): print 5
5
--- modulename: ./trace, funcname: _unsettrace
trace.py(80): sys.settrace(None)
我跟踪称为测试脚本t.py
,其进口的模块mymodule.py
是在一个包mypackage
(因此实际文件./mypackage/mymodule.py
)。该模块仅打印42,测试脚本本身打印5。
这样可以解决您的问题吗?
编辑:
根据第二种观点,我提出了一个不同的补丁。
在函数中globaltrace_lt()
,模块名是通过调用派生的modname()
; 修补此呼叫fullmodname()
:
modulename = fullmodname(filename)
我认为这可能是一个不太麻烦的补丁。