Jason R. Coombs <[email protected]> added the comment:
Changing the repro to:
```
import zipfile
try:
import zipp
except ImportError:
import zipfile as zipp
zip_file = zipfile.ZipFile('zipfile.zip')
name = zip_file.namelist()[0]
zipp.Path(zip_file)
zip_file.open(name)
```
I'm able now to test against zipfile or zipp. And I notice that the issue
occurs only on zipp<3.2 or Python<3.10.
```
draft $ pip-run -q 'zipp<3.3' -- issue44638.py
draft $ pip-run -q 'zipp<3.2' -- issue44638.py
Traceback (most recent call last):
File "/Users/jaraco/draft/issue44638.py", line 11, in <module>
zip_file.open(name)
File
"/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/zipfile.py",
line 1518, in open
fheader = zef_file.read(sizeFileHeader)
File
"/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/zipfile.py",
line 741, in read
self._file.seek(self._pos)
ValueError: seek of closed file
```
```
draft $ python3.10 issue44638.py
draft $ python3.9 issue44638.py
Traceback (most recent call last):
File "/Users/jaraco/draft/issue44638.py", line 11, in <module>
zip_file.open(name)
File
"/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/zipfile.py",
line 1518, in open
fheader = zef_file.read(sizeFileHeader)
File
"/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/zipfile.py",
line 741, in read
self._file.seek(self._pos)
ValueError: seek of closed file
```
Looking at the changelog
(https://zipp.readthedocs.io/en/latest/history.html#v3-2-0), it's clear now
that this issue is a duplicate of bpo-40564 and the problem goes away using the
original repro and Python 3.10:
```
draft $ cat > issue44638.py
import zipfile
class TestClass:
def __init__(self, path):
self.zip_file = zipfile.ZipFile(path)
def iter_dir(self):
return [each.name for each in zipfile.Path(self.zip_file).iterdir()]
def read(self, filename):
with self.zip_file.open(filename) as file:
print(file.read())
root = "zipfile.zip"
test = TestClass(root)
files = test.iter_dir()
test.read(files[0])
draft $ python3.10 issue44638.py
b'import zipfile\n\n\nclass TestClass:\n def __init__(self, path):\n
self.zip_file = zipfile.ZipFile(path)\n\n def iter_dir(self):\n
return [each.name for each in zipfile.Path(self.zip_file).iterdir()]\n\n def
read(self, filename):\n with self.zip_file.open(filename) as file:\n
print(file.read())\n\nroot = "zipfile.zip"\ntest =
TestClass(root)\nfiles = test.iter_dir()\ntest.read(files[0])\n'
```
The solution is to use zipp>=3.2 or Python 3.10.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue44638>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com