mirror of
https://github.com/python/cpython.git
synced 2025-08-23 10:16:01 +00:00
Close #15230: runpy.run_path now sets __package__ correctly. Also refactored the runpy tests to use a more systematic approach
This commit is contained in:
parent
2bb3021837
commit
761bb11374
3 changed files with 276 additions and 157 deletions
|
@ -68,6 +68,7 @@ def _run_code(code, run_globals, init_globals=None,
|
|||
run_globals.update(__name__ = mod_name,
|
||||
__file__ = mod_fname,
|
||||
__cached__ = None,
|
||||
__doc__ = None,
|
||||
__loader__ = mod_loader,
|
||||
__package__ = pkg_name)
|
||||
exec(code, run_globals)
|
||||
|
@ -242,12 +243,14 @@ def run_path(path_name, init_globals=None, run_name=None):
|
|||
"""
|
||||
if run_name is None:
|
||||
run_name = "<run_path>"
|
||||
pkg_name = run_name.rpartition(".")[0]
|
||||
importer = _get_importer(path_name)
|
||||
if isinstance(importer, imp.NullImporter):
|
||||
# Not a valid sys.path entry, so run the code directly
|
||||
# execfile() doesn't help as we want to allow compiled files
|
||||
code = _get_code_from_file(path_name)
|
||||
return _run_module_code(code, init_globals, run_name, path_name)
|
||||
return _run_module_code(code, init_globals, run_name, path_name,
|
||||
pkg_name=pkg_name)
|
||||
else:
|
||||
# Importer is defined for path, so add it to
|
||||
# the start of sys.path
|
||||
|
@ -266,7 +269,6 @@ def run_path(path_name, init_globals=None, run_name=None):
|
|||
mod_name, loader, code, fname = _get_main_module_details()
|
||||
finally:
|
||||
sys.modules[main_name] = saved_main
|
||||
pkg_name = ""
|
||||
with _TempModule(run_name) as temp_module, \
|
||||
_ModifiedArgv0(path_name):
|
||||
mod_globals = temp_module.module.__dict__
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue