c使用相对导入模拟模块

dan*_*ast 7 python import cprofile

我有这些文件 mymodule

mymodule
??? config.py
??? __init__.py
??? lib.py
Run Code Online (Sandbox Code Playgroud)

有了这个简单的内容:

# config.py
NAME = "Julius Cesar"

# lib.py
from .config import NAME

def get_name():
    return NAME
Run Code Online (Sandbox Code Playgroud)

我可以运行它(没有任何反应) 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
Run Code Online (Sandbox Code Playgroud)

那么,我怎么能cProfile成为图书馆?由于库没有做任何事情,只会对lib模块的导入进行分析,但这对我来说已经足够了.我不希望在这个阶段分析所有函数调用,只是导入模块.

如何使用cProfile为具有相对导入的模块执行此操作,避免使用ValueErrors?

Mar*_*gov 1

我希望我的理解是正确的,但您可以像这样使用 cProfile API:

\n\n
\xc2\xbb python\n>>> import cProfile\n>>> cProfile.run(\'import mylib.lib\')\n  511 function calls (500 primitive calls) in 0.002 seconds\n  Ordered by: standard name\n  ncalls  tottime  percall  cumtime  percall filename:lineno(function)\n   3    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:119(release)\n   ...\n>>>\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者你可以像这样一行完成python -c "import cProfile; cProfile.run(\'import mylib.lib\')"

\n\n

希望这可以帮助。

\n