7

私はこれらのファイルを持っています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ですか?

4

1 に答える 1

0

これが正しいことを願っていますが、次のように 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)
   ...
>>>

または、 のように 1 行で実行することもできますpython -c "import cProfile; cProfile.run('import mylib.lib')"

お役に立てれば。

于 2018-08-30T20:03:01.137 に答える