474ff0ec6a
In certain situations, file references (.py[co]) for Python files that fail to compile with compileall() are still added to distutils --record output. This output is used for pkg-plist generation and must only contain references to files that will be installed. One example of a failure condition is when a Python 2/3 compatible package containing a file containing Python 3.x only code is built with Python 2.x, such as Gunicorn's _gaiohttp.py [1] This change backports patches submitted against upstream issue 20397 [2] that has not yet been committed. - For Python 2.7 and 3.5, backport both install_lib and test - For Python 3.2, 3.3 and 3.4, only backport install_lib [1] https://svnweb.freebsd.org/changeset/ports/404558 [2] https://bugs.python.org/issue20397 Thank you to Brendan Molloy for producing and submitting the patches against upstream sources. Reviewed by: sbz (python) MFH: 2016Q1 Differential Revision: D4832
35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
From 9934ce31b8447667f71c211e559a8de71e8263db Mon Sep 17 00:00:00 2001
|
|
From: Brendan Molloy <brendan@bbqsrc.net>
|
|
Date: Mon, 4 Jan 2016 23:14:06 +1100
|
|
Subject: [PATCH] Check bytecode file actually exists and tests
|
|
|
|
Should solve issue 20397, where using the --record argument results
|
|
in files that failed to generate bytecode files are added to the
|
|
record file nonetheless.
|
|
|
|
--- Lib/distutils/command/install_lib.py.orig 2016-01-08 12:38:49 UTC
|
|
+++ Lib/distutils/command/install_lib.py
|
|
@@ -165,11 +165,19 @@ class install_lib(Command):
|
|
if ext != PYTHON_SOURCE_EXTENSION:
|
|
continue
|
|
if self.compile:
|
|
- bytecode_files.append(importlib.util.cache_from_source(
|
|
- py_file, debug_override=True))
|
|
+ candidate = importlib.util.cache_from_source(
|
|
+ py_file, debug_override=True)
|
|
+
|
|
+ if os.path.isfile(candidate):
|
|
+ bytecode_files.append(candidate)
|
|
+
|
|
if self.optimize > 0:
|
|
- bytecode_files.append(importlib.util.cache_from_source(
|
|
- py_file, debug_override=False))
|
|
+ candidate = importlib.util.cache_from_source(
|
|
+ py_file, debug_override=False)
|
|
+
|
|
+ if os.path.isfile(candidate):
|
|
+ bytecode_files.append(candidate)
|
|
+
|
|
|
|
return bytecode_files
|
|
|