Downloaded models are stored per default in the package folder.
However, when espnet_model_zoo is imported as a system library from a distribution package, its path is read-only.
Proposed solution:
Check for output folder access using os.access(modelcache, os.W_OK).
If not writeable, default to a different directory, for example $XDG_CACHE_HOME.
Steps to reproduce the issue:
Install espnet_model_zoo as system package.
Use ESPnet as regular user, not as root.
Then download a model file:
from espnet_model_zoo.downloader import ModelDownloader
d = ModelDownloader()
wsjmodel = d.download_and_unpack("kamo-naoyuki/wsj")
/usr/lib/python3.9/site-packages/espnet_model_zoo/downloader.py in download_and_unpack(self, name, version, quiet, **kwargs)
288
289 # Download the file to an unique path
--> 290 filename = self.download(url, quiet=quiet)
291
292 # Extract files from archived file
/usr/lib/python3.9/site-packages/espnet_model_zoo/downloader.py in download(self, name, version, quiet, **kwargs)
243 # Download the model file if not existing
244 if not (outdir / filename).exists():
--> 245 download(url, outdir / filename, quiet=quiet)
246
247 # Write the url for debugging
Downloaded models are stored per default in the package folder. However, when
espnet_model_zoo
is imported as a system library from a distribution package, its path is read-only.Proposed solution: Check for output folder access using
os.access(modelcache, os.W_OK)
. If not writeable, default to a different directory, for example$XDG_CACHE_HOME
.Steps to reproduce the issue:
espnet_model_zoo
as system package.With this, the following exception is thrown:
/usr/lib/python3.9/site-packages/espnet_model_zoo/downloader.py in download_and_unpack(self, name, version, quiet, **kwargs) 288 289 # Download the file to an unique path --> 290 filename = self.download(url, quiet=quiet) 291 292 # Extract files from archived file
/usr/lib/python3.9/site-packages/espnet_model_zoo/downloader.py in download(self, name, version, quiet, **kwargs) 243 # Download the model file if not existing 244 if not (outdir / filename).exists(): --> 245 download(url, outdir / filename, quiet=quiet) 246 247 # Write the url for debugging
/usr/lib/python3.9/site-packages/espnet_model_zoo/downloader.py in download(url, output_path, retry, chunk_size, quiet) 82 pbar.update(len(chunk)) 83 ---> 84 Path(output_path).parent.mkdir(parents=True, exist_ok=True) 85 shutil.move(Path(d) / "tmp", output_path) 86
/usr/lib/python3.9/pathlib.py in mkdir(self, mode, parents, exist_ok) 1310 """ 1311 try: -> 1312 self._accessor.mkdir(self, mode) 1313 except FileNotFoundError: 1314 if not parents or self.parent == self:
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.9/site-packages/espnet_model_zoo/b2d27107e15dd714684f5767ef10d402'