私はこれらのファイルを持っています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 モジュールのインポートのみがプロファイリングされますが、それで十分です。この段階では、すべての関数呼び出しをプロファイルするのではなく、モジュールのインポートのみをプロファイルします。
sを避けて、相対インポートを持つモジュールのcProfileでこれを行うにはどうすればよいValueError
ですか?