From 1153f503a38daf6388021575f1ad6ce8b702911b Mon Sep 17 00:00:00 2001
From: Christophe Vu-Brugier <cvubrugier@fastmail.fm>
Date: Wed, 23 Dec 2015 11:46:14 +0100
Subject: [PATCH] Add importlib fix for PEP 3147 issue

Python 3 has a new standard for installing .pyc file, called PEP
3147. Unfortunately, this standard requires both the .py and .pyc
files to be installed for a Python module to be found. This is quite
annoying on space-constrained embedded systems, since the .py file is
technically not required for execution.

This patch changes cache_from_source() and source_from_cache() in
importlib to get rid of the "__pycache__" directory.
This effectively disables PEP 3147 for:

* The python standard library
* Packages built with distutils or setuptools
* Packages built with automake that use the `py-compile` helper

Signed-off-by: Christophe Vu-Brugier <cvubrugier@fastmail.fm>
---
 Lib/importlib/_bootstrap.py | 26 +++++---------------------
 1 file changed, 5 insertions(+), 21 deletions(-)

diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 5b91c05..a1755ec 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -444,8 +444,6 @@ def cache_from_source(path, debug_override=None):
     If debug_override is not None, then it must be a boolean and is used in
     place of sys.flags.optimize.
 
-    If sys.implementation.cache_tag is None then NotImplementedError is raised.
-
     """
     debug = not sys.flags.optimize if debug_override is None else debug_override
     if debug:
@@ -454,33 +452,19 @@ def cache_from_source(path, debug_override=None):
         suffixes = OPTIMIZED_BYTECODE_SUFFIXES
     head, tail = _path_split(path)
     base, sep, rest = tail.rpartition('.')
-    tag = sys.implementation.cache_tag
-    if tag is None:
-        raise NotImplementedError('sys.implementation.cache_tag is None')
-    filename = ''.join([(base if base else rest), sep, tag, suffixes[0]])
-    return _path_join(head, _PYCACHE, filename)
+    filename = ''.join([(base if base else rest), suffixes[0]])
+    return _path_join(head, filename)
 
 
 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.
+    the .py file calculated to correspond to the .pyc/.pyo file.
 
     """
-    if sys.implementation.cache_tag is None:
-        raise NotImplementedError('sys.implementation.cache_tag is None')
-    head, pycache_filename = _path_split(path)
-    head, pycache = _path_split(head)
-    if pycache != _PYCACHE:
-        raise ValueError('{} not bottom-level directory in '
-                         '{!r}'.format(_PYCACHE, path))
-    if pycache_filename.count('.') != 2:
-        raise ValueError('expected only 2 dots in '
-                         '{!r}'.format(pycache_filename))
-    base_filename = pycache_filename.partition('.')[0]
+    head, filename = _path_split(path)
+    base_filename = filename.partition('.')[0]
     return _path_join(head, base_filename + SOURCE_SUFFIXES[0])
 
 
-- 
2.6.4

