Jason R. Coombs <jar...@jaraco.com> 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 <rep...@bugs.python.org>
<https://bugs.python.org/issue44638>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to