Skip to content

Commit 1ba0bb2

Browse files
authored
gh-120910: Fix issue resolving relative paths outside site-packages. (#120911)
Incorporates changes from importlib_metadata 7.2.1.
1 parent 0b918e8 commit 1ba0bb2

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed

Lib/importlib/metadata/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ def _read_files_egginfo_installed(self):
567567
paths = (
568568
(subdir / name)
569569
.resolve()
570-
.relative_to(self.locate_file('').resolve())
570+
.relative_to(self.locate_file('').resolve(), walk_up=True)
571571
.as_posix()
572572
for name in text.splitlines()
573573
)

Lib/test/test_importlib/metadata/fixtures.py

+34
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,40 @@ def main():
234234
}
235235

236236

237+
class EggInfoPkgPipInstalledExternalDataFiles(OnSysPath, SiteBuilder):
238+
files: FilesSpec = {
239+
"egg_with_module_pkg.egg-info": {
240+
"PKG-INFO": "Name: egg_with_module-pkg",
241+
# SOURCES.txt is made from the source archive, and contains files
242+
# (setup.py) that are not present after installation.
243+
"SOURCES.txt": """
244+
egg_with_module.py
245+
setup.py
246+
egg_with_module.json
247+
egg_with_module_pkg.egg-info/PKG-INFO
248+
egg_with_module_pkg.egg-info/SOURCES.txt
249+
egg_with_module_pkg.egg-info/top_level.txt
250+
""",
251+
# installed-files.txt is written by pip, and is a strictly more
252+
# accurate source than SOURCES.txt as to the installed contents of
253+
# the package.
254+
"installed-files.txt": """
255+
../../../etc/jupyter/jupyter_notebook_config.d/relative.json
256+
/etc/jupyter/jupyter_notebook_config.d/absolute.json
257+
../egg_with_module.py
258+
PKG-INFO
259+
SOURCES.txt
260+
top_level.txt
261+
""",
262+
# missing top_level.txt (to trigger fallback to installed-files.txt)
263+
},
264+
"egg_with_module.py": """
265+
def main():
266+
print("hello world")
267+
""",
268+
}
269+
270+
237271
class EggInfoPkgPipInstalledNoModules(OnSysPath, SiteBuilder):
238272
files: FilesSpec = {
239273
"egg_with_no_modules_pkg.egg-info": {

Lib/test/test_importlib/metadata/test_api.py

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class APITests(
2929
fixtures.EggInfoPkg,
3030
fixtures.EggInfoPkgPipInstalledNoToplevel,
3131
fixtures.EggInfoPkgPipInstalledNoModules,
32+
fixtures.EggInfoPkgPipInstalledExternalDataFiles,
3233
fixtures.EggInfoPkgSourcesFallback,
3334
fixtures.DistInfoPkg,
3435
fixtures.DistInfoPkgWithDot,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
When reading installed files from an egg, use ``relative_to(walk_up=True)``
2+
to honor files installed outside of the installation root.

0 commit comments

Comments
 (0)