Description
Bug report
Bug description:
Good evening,
I have recently installed Python 3.13 (Windows x64) over 3.12.
Now zipapp.create_archive(..)
is creating just empty archives.
After some fiddling around I found there might be an issue in these lines:
(from zipapp.py, lines 113 ff)
with _maybe_open(target, 'wb') as fd:
_write_file_prefix(fd, interpreter)
compression = (zipfile.ZIP_DEFLATED if compressed else
zipfile.ZIP_STORED)
with zipfile.ZipFile(fd, 'w', compression=compression) as z:
for child in sorted(source.rglob('*')):
arcname = child.relative_to(source)
if filter is None or filter(arcname) and child.resolve() != arcname.resolve(): # ██ LOOK HERE ! ██
z.write(child, arcname.as_posix())
if main_py:
z.writestr('__main__.py', main_py.encode('utf-8'))
This change was introduced in Python 3.13 (have verified against 3.12 sources) and seemingly causes the trouble.
My guess is, as child
is pointing to the same file as arcname
, and naturally, they both resolve to the same file, no file gets added due to the !=
check, ever, to the archive-to-be-created.
Maybe it was intended to check against target
, not arcname
?
Once I monkeypatched the and child.resolve() != arcname.resolve()
part away, the archive got written again.
Or am I just not doing it right?
Any help much appreciated!
Sebastian.
CPython versions tested on:
3.13
Operating systems tested on:
Windows
Linked PRs
Metadata
Metadata
Assignees
Projects
Status