mirror of
https://github.com/python/cpython.git
synced 2025-07-12 22:05:16 +00:00
Lib/imp.py for imp.source_from_cache() instead of its own C version. Also change PyImport_ExecCodeModuleObject() to not infer the source path from the bytecode path like PyImport_ExecCodeModuleWithPathnames() does. This makes the function less magical. This also has the side-effect of removing all uses of MAXPATHLEN in Python/import.c which can cause failures on really long filenames.
This commit is contained in:
parent
d104eef118
commit
a6473f9cfd
6 changed files with 4086 additions and 4065 deletions
25
Lib/imp.py
25
Lib/imp.py
|
@ -13,7 +13,7 @@ from _imp import (lock_held, acquire_lock, release_lock,
|
|||
|
||||
# Directly exposed by this module
|
||||
from importlib._bootstrap import new_module
|
||||
from importlib._bootstrap import cache_from_source
|
||||
from importlib._bootstrap import cache_from_source, source_from_cache
|
||||
|
||||
|
||||
from importlib import _bootstrap
|
||||
|
@ -58,29 +58,6 @@ def get_suffixes():
|
|||
return extensions + source + bytecode
|
||||
|
||||
|
||||
def source_from_cache(path):
|
||||
"""Given the path to a .pyc./.pyo file, return the path to its .py file.
|
||||
|
||||
The .pyc/.pyo file does not need to exist; this simply returns the path to
|
||||
the .py file calculated to correspond to the .pyc/.pyo file. If path does
|
||||
not conform to PEP 3147 format, ValueError will be raised. If
|
||||
sys.implementation.cache_tag is None then NotImplementedError is raised.
|
||||
|
||||
"""
|
||||
if sys.implementation.cache_tag is None:
|
||||
raise NotImplementedError('sys.implementation.cache_tag is None')
|
||||
head, pycache_filename = os.path.split(path)
|
||||
head, pycache = os.path.split(head)
|
||||
if pycache != _bootstrap._PYCACHE:
|
||||
raise ValueError('{} not bottom-level directory in '
|
||||
'{!r}'.format(_bootstrap._PYCACHE, path))
|
||||
if pycache_filename.count('.') != 2:
|
||||
raise ValueError('expected only 2 dots in '
|
||||
'{!r}'.format(pycache_filename))
|
||||
base_filename = pycache_filename.partition('.')[0]
|
||||
return os.path.join(head, base_filename + machinery.SOURCE_SUFFIXES[0])
|
||||
|
||||
|
||||
class NullImporter:
|
||||
|
||||
"""Null import object."""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue