summaryrefslogtreecommitdiffstats
path: root/Lib/cProfile.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/cProfile.py')
-rw-r--r--Lib/cProfile.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/Lib/cProfile.py b/Lib/cProfile.py
index e7c868b..770d26f 100644
--- a/Lib/cProfile.py
+++ b/Lib/cProfile.py
@@ -6,6 +6,7 @@ __all__ = ["run", "runctx", "Profile"]
import _lsprof
import importlib.machinery
+import importlib.util
import io
import profile as _pyprofile
@@ -173,13 +174,22 @@ def main():
code = compile(fp.read(), progname, 'exec')
spec = importlib.machinery.ModuleSpec(name='__main__', loader=None,
origin=progname)
- globs = {
+ module = importlib.util.module_from_spec(spec)
+ # Set __main__ so that importing __main__ in the profiled code will
+ # return the same namespace that the code is executing under.
+ sys.modules['__main__'] = module
+ # Ensure that we're using the same __dict__ instance as the module
+ # for the global variables so that updates to globals are reflected
+ # in the module's namespace.
+ globs = module.__dict__
+ globs.update({
'__spec__': spec,
'__file__': spec.origin,
'__name__': spec.name,
'__package__': None,
'__cached__': None,
- }
+ })
+
try:
runctx(code, globs, None, options.outfile, options.sort)
except BrokenPipeError as exc: