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
41 lines
1.6 KiB
Python
41 lines
1.6 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 | 17 +++++++++++++----
|
|
Lib/distutils/tests/test_install_lib.py | 8 ++++++--
|
|
2 files changed, 19 insertions(+), 6 deletions(-)
|
|
|
|
--- Lib/distutils/command/install_lib.py.orig 2015-12-07 01:39:07 UTC
|
|
+++ Lib/distutils/command/install_lib.py
|
|
@@ -164,12 +164,21 @@ class install_lib(Command):
|
|
ext = os.path.splitext(os.path.normcase(py_file))[1]
|
|
if ext != PYTHON_SOURCE_EXTENSION:
|
|
continue
|
|
+
|
|
if self.compile:
|
|
- bytecode_files.append(importlib.util.cache_from_source(
|
|
- py_file, optimization=''))
|
|
+ candidate = importlib.util.cache_from_source(
|
|
+ py_file, optimization='')
|
|
+
|
|
+ if os.path.isfile(candidate):
|
|
+ bytecode_files.append(candidate)
|
|
+
|
|
if self.optimize > 0:
|
|
- bytecode_files.append(importlib.util.cache_from_source(
|
|
- py_file, optimization=self.optimize))
|
|
+ candidate = importlib.util.cache_from_source(
|
|
+ py_file, optimization=self.optimize)
|
|
+
|
|
+ if os.path.isfile(candidate):
|
|
+ bytecode_files.append(candidate)
|
|
+
|
|
|
|
return bytecode_files
|
|
|