There are still issues with importlib.metadata and empty directories,
which surface when doing builds with existing build trees.

I've raised this on the upstream ticket that Alex Kanavin has already
filed[1] so hopefully we can have a resolution soon.

This reverts commit 058c3a6e2b30103202f3995930825fc2f366274f.

[1] https://github.com/python/importlib_metadata/issues/489

Signed-off-by: Ross Burton <[email protected]>
---
 .../python3/deterministic_imports.patch       | 40 +++++++++++++++++++
 .../recipes-devtools/python/python3_3.12.4.bb |  1 +
 2 files changed, 41 insertions(+)
 create mode 100644 
meta/recipes-devtools/python/python3/deterministic_imports.patch

diff --git a/meta/recipes-devtools/python/python3/deterministic_imports.patch 
b/meta/recipes-devtools/python/python3/deterministic_imports.patch
new file mode 100644
index 00000000000..2de6ae2e981
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/deterministic_imports.patch
@@ -0,0 +1,40 @@
+From 039d5e652796b55f1132afa568c7432b6ed89afd Mon Sep 17 00:00:00 2001
+From: Richard Purdie <[email protected]>
+Date: Fri, 27 May 2022 17:05:44 +0100
+Subject: [PATCH] python3: Ensure stale empty python module directories don't
+
+There are two issues here. Firstly, the modules are accessed in on disk order. 
This
+means behaviour seen on one system might not reproduce on another and is a 
real headache.
+
+Secondly, empty directories left behind by previous modules might be looked 
at. This
+has caused a long string of different issues for us.
+
+As a result, patch this to a behaviour which works for us.
+
+Upstream-Status: Submitted [https://github.com/python/cpython/issues/120492; 
need to first talk to upstream to see if they'll take one or both fixes]
+Signed-off-by: Richard Purdie <[email protected]>
+
+---
+ Lib/importlib/metadata/__init__.py | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/importlib/metadata/__init__.py 
b/Lib/importlib/metadata/__init__.py
+index 82e0ce1..969cac4 100644
+--- a/Lib/importlib/metadata/__init__.py
++++ b/Lib/importlib/metadata/__init__.py
+@@ -710,7 +710,14 @@ class Lookup:
+         self.infos = FreezableDefaultDict(list)
+         self.eggs = FreezableDefaultDict(list)
+ 
+-        for child in path.children():
++        for child in sorted(path.children()):
++            childpath = pathlib.Path(path.root, child)
++            try:
++                if childpath.is_dir() and not any(childpath.iterdir()):
++                    # Empty directories aren't interesting
++                    continue
++            except PermissionError:
++                continue
+             low = child.lower()
+             if low.endswith((".dist-info", ".egg-info")):
+                 # rpartition is faster than splitext and suitable for this 
purpose.
diff --git a/meta/recipes-devtools/python/python3_3.12.4.bb 
b/meta/recipes-devtools/python/python3_3.12.4.bb
index 743ba0b1f1f..119fe10ca93 100644
--- a/meta/recipes-devtools/python/python3_3.12.4.bb
+++ b/meta/recipes-devtools/python/python3_3.12.4.bb
@@ -24,6 +24,7 @@ SRC_URI = 
"http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
            file://makerace.patch \
            file://0001-sysconfig.py-use-platlibdir-also-for-purelib.patch \
            
file://0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch \
+           file://deterministic_imports.patch \
            file://0001-Avoid-shebang-overflow-on-python-config.py.patch \
            file://0001-Update-test_sysconfig-for-posix_user-purelib.patch \
            
file://0001-skip-no_stdout_fileno-test-due-to-load-variability.patch \
-- 
2.34.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#202333): 
https://lists.openembedded.org/g/openembedded-core/message/202333
Mute This Topic: https://lists.openembedded.org/mt/107501026/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to