[英]cProfiling a module with relative imports
我在mymodule
有這些文件
mymodule
├── config.py
├── __init__.py
└── lib.py
有了這個簡單的內容:
# config.py
NAME = "Julius Cesar"
# lib.py
from .config import NAME
def get_name():
return NAME
我可以用python -m mymodule.lib
運行它(沒有任何反應)
但我無法描述它:
» python -m cProfile mymodule/lib.py
2 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 lib.py:1(<module>)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/lib/python2.7/cProfile.py", line 199, in <module>
main()
File "/usr/lib/python2.7/cProfile.py", line 192, in main
runctx(code, globs, None, options.outfile, options.sort)
File "/usr/lib/python2.7/cProfile.py", line 49, in runctx
prof = prof.runctx(statement, globals, locals)
File "/usr/lib/python2.7/cProfile.py", line 140, in runctx
exec cmd in globals, locals
File "mymodule/lib.py", line 1, in <module>
from .config import NAME
ValueError: Attempted relative import in non-package
那么,我該如何cProfile
一個庫? 由於庫沒有做任何事情,只會對lib模塊的導入進行分析,但這對我來說已經足夠了。 我不希望在這個階段分析所有函數調用,只是導入模塊。
如何使用cProfile為具有相對導入的模塊執行此操作,避免使用ValueError
?
我希望我這樣做是正確的,但你可以像這樣使用cProfile API:
» python
>>> import cProfile
>>> cProfile.run('import mylib.lib')
511 function calls (500 primitive calls) in 0.002 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
3 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:119(release)
...
>>>
或者你可以在一行中完成它,比如python -c "import cProfile; cProfile.run('import mylib.lib')"
。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.