Closed aguschin closed 1 year ago
Hai @aguschin,
The following error appeared when I ran gto --traceback show --repo REPO
:
During handling of the above exception, another exception occurred:
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ C:\Users\ragha\Anaconda\envs\dvc\lib\tempfile.py:820 in onerror │
│ │
│ 817 │ │ │ │ │ resetperms(path) │
│ 818 │ │ │ │ │ │
│ 819 │ │ │ │ │ try: │
│ > 820 │ │ │ │ │ │ _os.unlink(path) │
│ 821 │ │ │ │ │ # PermissionError is raised on FreeBSD for directories │
│ 822 │ │ │ │ │ except (IsADirectoryError, PermissionError): │
│ 823 │ │ │ │ │ │ cls._rmtree(path, ignore_errors=ignore_errors) │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ cls = <class 'tempfile.TemporaryDirectory'> │ │
│ │ exc_info = ( │ │
│ │ │ <class 'PermissionError'>, │ │
│ │ │ PermissionError(13, 'The process cannot access the file because it is │ │
│ │ being used by another process'), │ │
│ │ │ <traceback object at 0x000001BBB62856C0> │ │
│ │ ) │ │
│ │ func = <built-in function rmdir> │ │
│ │ ignore_errors = False │ │
│ │ name = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ │ path = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ │ resetperms = <function TemporaryDirectory._rmtree.<locals>.onerror.<locals>.resetperms at │ │
│ │ 0x000001BBB6288280> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
PermissionError: [WinError 5] Access is denied: 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f'
During handling of the above exception, another exception occurred:
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ C:\Users\ragha\Anaconda\envs\dvc\lib\shutil.py:619 in _rmtree_unsafe │
│ │
│ 616 │ │ │ except OSError: │
│ 617 │ │ │ │ onerror(os.unlink, fullname, sys.exc_info()) │
│ 618 │ try: │
│ > 619 │ │ os.rmdir(path) │
│ 620 │ except OSError: │
│ 621 │ │ onerror(os.rmdir, path, sys.exc_info()) │
│ 622 │
│ │
│ ┌───────────────────────────────────────── locals ──────────────────────────────────────────┐ │
│ │ entries = [] │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x000001BBB6288310> │ │
│ │ path = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ │ scandir_it = <nt.ScandirIterator object at 0x000001BBB3E9B8A0> │ │
│ └───────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f'
During handling of the above exception, another exception occurred:
C:\Users\ragha\Anaconda\envs\dvc\lib\shutil.py:747 in rmtree │
│ │
│ 744 │ │ │ onerror(os.path.islink, path, sys.exc_info()) │
│ 745 │ │ │ # can't continue even if onerror hook returns │
│ 746 │ │ │ return │
│ > 747 │ │ return _rmtree_unsafe(path, onerror) │
│ 748 │
│ 749 # Allow introspection of whether or not the hardening against symlink │
│ 750 # attacks is supported on the current platform │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ ignore_errors = False │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x000001BBB62E5510> │ │
│ │ path = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ragha\Anaconda\envs\dvc\lib\shutil.py:621 in _rmtree_unsafe │
│ │
│ 618 │ try: │
│ 619 │ │ os.rmdir(path) │
│ 620 │ except OSError: │
│ > 621 │ │ onerror(os.rmdir, path, sys.exc_info()) │
│ 622 │
│ 623 # Version using fd-based APIs to protect against races │
│ 624 def _rmtree_safe_fd(topfd, path, onerror): │
│ │
│ ┌───────────────────────────────────────── locals ──────────────────────────────────────────┐ │
│ │ entries = [] │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x000001BBB62E5510> │ │
│ │ path = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ │ scandir_it = <nt.ScandirIterator object at 0x000001BBB3EB9670> │ │
│ └───────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ragha\Anaconda\envs\dvc\lib\tempfile.py:823 in onerror │
│ │
│ 820 │ │ │ │ │ │ _os.unlink(path) │
│ 821 │ │ │ │ │ # PermissionError is raised on FreeBSD for directories │
│ 822 │ │ │ │ │ except (IsADirectoryError, PermissionError): │
│ > 823 │ │ │ │ │ │ cls._rmtree(path, ignore_errors=ignore_errors) │
│ 824 │ │ │ │ except FileNotFoundError: │
│ 825 │ │ │ │ │ pass │
│ 826 │ │ │ elif issubclass(exc_info[0], FileNotFoundError): │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ cls = <class 'tempfile.TemporaryDirectory'> │ │
│ │ exc_info = ( │ │
│ │ │ <class 'PermissionError'>, │ │
│ │ │ PermissionError(13, 'The process cannot access the file because it is │ │
│ │ being used by another process'), │ │
│ │ │ <traceback object at 0x000001BBB62D7AC0> │ │
│ │ ) │ │
│ │ func = <built-in function rmdir> │ │
│ │ ignore_errors = False │ │
│ │ name = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ │ path = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ │ resetperms = <function TemporaryDirectory._rmtree.<locals>.onerror.<locals>.resetperms at │ │
│ │ 0x000001BBB62E55A0> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ragha\Anaconda\envs\dvc\lib\tempfile.py:832 in _rmtree │
│ │
│ 829 │ │ │ │ if not ignore_errors: │
│ 830 │ │ │ │ │ raise │
│ 831 │ │ │
│ > 832 │ │ _shutil.rmtree(name, onerror=onerror) │
│ 833 │ │
│ 834 │ @classmethod │
│ 835 │ def _cleanup(cls, name, warn_message, ignore_errors=False): │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ cls = <class 'tempfile.TemporaryDirectory'> │ │
│ │ ignore_errors = False │ │
│ │ name = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x000001BBB62E5630> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ragha\Anaconda\envs\dvc\lib\shutil.py:696 in rmtree │
│ │
│ 693 │ is false and onerror is None, an exception is raised. │
│ 694 │ │
│ 695 │ """ │
│ > 696 │ sys.audit("shutil.rmtree", path) │
│ 697 │ if ignore_errors: │
│ 698 │ │ def onerror(*args): │
│ 699 │ │ │ pass │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ ignore_errors = False │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x000001BBB62E5630> │ │
│ │ path = 'C:\\Users\\ragha\\AppData\\Local\\Temp\\tmpmeq_484f' │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
RecursionError: maximum recursion depth exceeded while calling a Python object
Hi @RaghavaAlajangi! Interesting, I'm not seeing any gto
code in the traceback - only some dvc functions. Is this a full traceback? During handling of the above exception, another exception occurred:
means there should be something else above. Could you please post it as well?
Also, are you running this command on the remote repo (on github/gitlab/etc?) or on a local repo (the one you already cloned from github/etc)?
Hai @aguschin, yes, I am running this command on the remote repo. I haven't cloned it.
gto --traceback show --repo https://gitlab.gwdg.de/raghava.alajangi/mlops-with-dvc
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:618 in _rmtree_unsafe │
│ │
│ 615 │ │ │ _rmtree_unsafe(fullname, onerror) │
│ 616 │ │ else: │
│ 617 │ │ │ try: │
│ > 618 │ │ │ │ os.unlink(fullname) │
│ 619 │ │ │ except OSError: │
│ 620 │ │ │ │ onerror(os.unlink, fullname, sys.exc_info()) │
│ 621 │ try: │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ entries = [ │ │
│ │ │ <DirEntry 'pack-85508dba7574aa155e60e221069050bca24b7bb0.idx'>, │ │
│ │ │ <DirEntry 'pack-85508dba7574aa155e60e221069050bca24b7bb0.pack'> │ │
│ │ ] │ │
│ │ entry = <DirEntry 'pack-85508dba7574aa155e60e221069050bca24b7bb0.idx'> │ │
│ │ fullname = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack\\p… │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377103F40> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack' │ │
│ │ scandir_it = <nt.ScandirIterator object at 0x0000024374B26580> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
PermissionError: [WinError 5] Access is denied: 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack\\pack-85508dba7574aa155e60e221069050bca24b7bb0.idx'
During handling of the above exception, another exception occurred:
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\tempfile.py:843 in onerror │
│ │
│ 840 │ │ │ │ │ resetperms(path) │
│ 841 │ │ │ │ │ │
│ 842 │ │ │ │ │ try: │
│ > 843 │ │ │ │ │ │ _os.unlink(path) │
│ 844 │ │ │ │ │ # PermissionError is raised on FreeBSD for directories │
│ 845 │ │ │ │ │ except (IsADirectoryError, PermissionError): │
│ 846 │ │ │ │ │ │ cls._rmtree(path, ignore_errors=ignore_errors) │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ cls = <class 'tempfile.TemporaryDirectory'> │ │
│ │ exc_info = ( │ │
│ │ │ <class 'PermissionError'>, │ │
│ │ │ PermissionError(13, 'Access is denied'), │ │
│ │ │ <traceback object at 0x00000243771518C0> │ │
│ │ ) │ │
│ │ func = <built-in function unlink> │ │
│ │ ignore_errors = False │ │
│ │ name = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog' │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack… │ │
│ │ resetperms = <function TemporaryDirectory._rmtree.<locals>.onerror.<locals>.resetperms at │ │
│ │ 0x00000243771641F0> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
PermissionError: [WinError 5] Access is denied: 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack\\pack-85508dba7574aa155e60e221069050bca24b7bb0.idx'
During handling of the above exception, another exception occurred:
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\site-packages\gto\git_utils.py:28 in from_repo │
│ │
│ 25 │ ): │
│ 26 │ │ if isinstance(repo, str) and is_url_of_remote_repo(repo_path=repo): │
│ 27 │ │ │ try: │
│ > 28 │ │ │ │ with cloned_git_repo(repo=repo) as tmp_dir: │
│ 29 │ │ │ │ │ repo = read_repo(tmp_dir) │
│ 30 │ │ │ │ │ repo.git.checkout(branch) │
│ 31 │ │ │ │ │ yield cls.from_local_repo(repo=repo, config=config) │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ branch = None │ │
│ │ cls = <class 'gto.registry.GitRegistry'> │ │
│ │ config = None │ │
│ │ repo = <git.repo.base.Repo 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git'> │ │
│ │ tmp_dir = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog' │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\contextlib.py:142 in __exit__ │
│ │
│ 139 │ def __exit__(self, typ, value, traceback): │
│ 140 │ │ if typ is None: │
│ 141 │ │ │ try: │
│ > 142 │ │ │ │ next(self.gen) │
│ 143 │ │ │ except StopIteration: │
│ 144 │ │ │ │ return False │
│ 145 │ │ │ else: │
│ │
│ ┌──────────────────────────────────── locals ────────────────────────────────────┐ │
│ │ self = <contextlib._GeneratorContextManager object at 0x000002437710B760> │ │
│ │ traceback = None │ │
│ │ typ = None │ │
│ │ value = None │ │
│ └────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\site-packages\gto\git_utils.py:112 in cloned_git_repo │
│ │
│ 109 │ git_clone(repo=repo, dir=tmp_dir.name) │
│ 110 │ yield tmp_dir.name │
│ 111 │ logging.debug("delete temporary directory %s", tmp_dir) │
│ > 112 │ tmp_dir.cleanup() │
│ 113 │
│ 114 │
│ 115 def git_clone(repo: str, dir: str) -> None: │
│ │
│ ┌──────────────────────────────────────── locals ────────────────────────────────────────┐ │
│ │ repo = 'https://gitlab.gwdg.de/raghava.alajangi/mlops-with-dvc' │ │
│ │ tmp_dir = <TemporaryDirectory 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog'> │ │
│ └────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\tempfile.py:873 in cleanup │
│ │
│ 870 │ │
│ 871 │ def cleanup(self): │
│ 872 │ │ if self._finalizer.detach() or _os.path.exists(self.name): │
│ > 873 │ │ │ self._rmtree(self.name, ignore_errors=self._ignore_cleanup_errors) │
│ 874 │ │
│ 875 │ __class_getitem__ = classmethod(_types.GenericAlias) │
│ 876 │
│ │
│ ┌────────────────────────────────────── locals ───────────────────────────────────────┐ │
│ │ self = <TemporaryDirectory 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog'> │ │
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\tempfile.py:855 in _rmtree │
│ │
│ 852 │ │ │ │ if not ignore_errors: │
│ 853 │ │ │ │ │ raise │
│ 854 │ │ │
│ > 855 │ │ _shutil.rmtree(name, onerror=onerror) │
│ 856 │ │
│ 857 │ @classmethod │
│ 858 │ def _cleanup(cls, name, warn_message, ignore_errors=False): │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ cls = <class 'tempfile.TemporaryDirectory'> │ │
│ │ ignore_errors = False │ │
│ │ name = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog' │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377103F40> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:750 in rmtree │
│ │
│ 747 │ │ │ onerror(os.path.islink, path, sys.exc_info()) │
│ 748 │ │ │ # can't continue even if onerror hook returns │
│ 749 │ │ │ return │
│ > 750 │ │ return _rmtree_unsafe(path, onerror) │
│ 751 │
│ 752 # Allow introspection of whether or not the hardening against symlink │
│ 753 # attacks is supported on the current platform │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ ignore_errors = False │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377103F40> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog' │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:615 in _rmtree_unsafe │
│ │
│ 612 │ │ │ except OSError: │
│ 613 │ │ │ │ onerror(os.path.islink, fullname, sys.exc_info()) │
│ 614 │ │ │ │ continue │
│ > 615 │ │ │ _rmtree_unsafe(fullname, onerror) │
│ 616 │ │ else: │
│ 617 │ │ │ try: │
│ 618 │ │ │ │ os.unlink(fullname) │
│ │
│ ┌───────────────────────────────────────── locals ──────────────────────────────────────────┐ │
│ │ entries = [ │ │
│ │ │ <DirEntry '.dvc'>, │ │
│ │ │ <DirEntry '.dvcignore'>, │ │
│ │ │ <DirEntry '.git'>, │ │
│ │ │ <DirEntry '.gitignore'>, │ │
│ │ │ <DirEntry '.gitlab-ci.yml'>, │ │
│ │ │ <DirEntry '.mlem.yaml'>, │ │
│ │ │ <DirEntry 'data'>, │ │
│ │ │ <DirEntry 'dvc.lock'>, │ │
│ │ │ <DirEntry 'dvc.yaml'>, │ │
│ │ │ <DirEntry 'models'>, │ │
│ │ │ ... +5 │ │
│ │ ] │ │
│ │ entry = <DirEntry '.git'> │ │
│ │ fullname = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git' │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377103F40> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog' │ │
│ │ scandir_it = <nt.ScandirIterator object at 0x0000024374B26000> │ │
│ └───────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:615 in _rmtree_unsafe │
│ │
│ 612 │ │ │ except OSError: │
│ 613 │ │ │ │ onerror(os.path.islink, fullname, sys.exc_info()) │
│ 614 │ │ │ │ continue │
│ > 615 │ │ │ _rmtree_unsafe(fullname, onerror) │
│ 616 │ │ else: │
│ 617 │ │ │ try: │
│ 618 │ │ │ │ os.unlink(fullname) │
│ │
│ ┌───────────────────────────────────────── locals ──────────────────────────────────────────┐ │
│ │ entries = [ │ │
│ │ │ <DirEntry 'config'>, │ │
│ │ │ <DirEntry 'description'>, │ │
│ │ │ <DirEntry 'HEAD'>, │ │
│ │ │ <DirEntry 'hooks'>, │ │
│ │ │ <DirEntry 'index'>, │ │
│ │ │ <DirEntry 'info'>, │ │
│ │ │ <DirEntry 'logs'>, │ │
│ │ │ <DirEntry 'objects'>, │ │
│ │ │ <DirEntry 'packed-refs'>, │ │
│ │ │ <DirEntry 'refs'> │ │
│ │ ] │ │
│ │ entry = <DirEntry 'objects'> │ │
│ │ fullname = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects' │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377103F40> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git' │ │
│ │ scandir_it = <nt.ScandirIterator object at 0x0000024374B25240> │ │
│ └───────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:615 in _rmtree_unsafe │
│ │
│ 612 │ │ │ except OSError: │
│ 613 │ │ │ │ onerror(os.path.islink, fullname, sys.exc_info()) │
│ 614 │ │ │ │ continue │
│ > 615 │ │ │ _rmtree_unsafe(fullname, onerror) │
│ 616 │ │ else: │
│ 617 │ │ │ try: │
│ 618 │ │ │ │ os.unlink(fullname) │
│ │
│ ┌───────────────────────────────────────── locals ──────────────────────────────────────────┐ │
│ │ entries = [<DirEntry 'info'>, <DirEntry 'pack'>] │ │
│ │ entry = <DirEntry 'pack'> │ │
│ │ fullname = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack' │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377103F40> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects' │ │
│ │ scandir_it = <nt.ScandirIterator object at 0x0000024374B262C0> │ │
│ └───────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:620 in _rmtree_unsafe │
│ │
│ 617 │ │ │ try: │
│ 618 │ │ │ │ os.unlink(fullname) │
│ 619 │ │ │ except OSError: │
│ > 620 │ │ │ │ onerror(os.unlink, fullname, sys.exc_info()) │
│ 621 │ try: │
│ 622 │ │ os.rmdir(path) │
│ 623 │ except OSError: │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ entries = [ │ │
│ │ │ <DirEntry 'pack-85508dba7574aa155e60e221069050bca24b7bb0.idx'>, │ │
│ │ │ <DirEntry 'pack-85508dba7574aa155e60e221069050bca24b7bb0.pack'> │ │
│ │ ] │ │
│ │ entry = <DirEntry 'pack-85508dba7574aa155e60e221069050bca24b7bb0.idx'> │ │
│ │ fullname = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack\\p… │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377103F40> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack' │ │
│ │ scandir_it = <nt.ScandirIterator object at 0x0000024374B26580> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\tempfile.py:846 in onerror │
│ │
│ 843 │ │ │ │ │ │ _os.unlink(path) │
│ 844 │ │ │ │ │ # PermissionError is raised on FreeBSD for directories │
│ 845 │ │ │ │ │ except (IsADirectoryError, PermissionError): │
│ > 846 │ │ │ │ │ │ cls._rmtree(path, ignore_errors=ignore_errors) │
│ 847 │ │ │ │ except FileNotFoundError: │
│ 848 │ │ │ │ │ pass │
│ 849 │ │ │ elif issubclass(exc_info[0], FileNotFoundError): │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ cls = <class 'tempfile.TemporaryDirectory'> │ │
│ │ exc_info = ( │ │
│ │ │ <class 'PermissionError'>, │ │
│ │ │ PermissionError(13, 'Access is denied'), │ │
│ │ │ <traceback object at 0x00000243771518C0> │ │
│ │ ) │ │
│ │ func = <built-in function unlink> │ │
│ │ ignore_errors = False │ │
│ │ name = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog' │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack… │ │
│ │ resetperms = <function TemporaryDirectory._rmtree.<locals>.onerror.<locals>.resetperms at │ │
│ │ 0x00000243771641F0> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\tempfile.py:855 in _rmtree │
│ │
│ 852 │ │ │ │ if not ignore_errors: │
│ 853 │ │ │ │ │ raise │
│ 854 │ │ │
│ > 855 │ │ _shutil.rmtree(name, onerror=onerror) │
│ 856 │ │
│ 857 │ @classmethod │
│ 858 │ def _cleanup(cls, name, warn_message, ignore_errors=False): │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ cls = <class 'tempfile.TemporaryDirectory'> │ │
│ │ ignore_errors = False │ │
│ │ name = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack… │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377164280> │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:750 in rmtree │
│ │
│ 747 │ │ │ onerror(os.path.islink, path, sys.exc_info()) │
│ 748 │ │ │ # can't continue even if onerror hook returns │
│ 749 │ │ │ return │
│ > 750 │ │ return _rmtree_unsafe(path, onerror) │
│ 751 │
│ 752 # Allow introspection of whether or not the hardening against symlink │
│ 753 # attacks is supported on the current platform │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ ignore_errors = False │ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377164280> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack… │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:601 in _rmtree_unsafe │
│ │
│ 598 │ │ with os.scandir(path) as scandir_it: │
│ 599 │ │ │ entries = list(scandir_it) │
│ 600 │ except OSError: │
│ > 601 │ │ onerror(os.scandir, path, sys.exc_info()) │
│ 602 │ │ entries = [] │
│ 603 │ for entry in entries: │
│ 604 │ │ fullname = entry.path │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377164280> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack\\pack… │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\shutil.py:598 in _rmtree_unsafe │
│ │
│ 595 # version vulnerable to race conditions │
│ 596 def _rmtree_unsafe(path, onerror): │
│ 597 │ try: │
│ > 598 │ │ with os.scandir(path) as scandir_it: │
│ 599 │ │ │ entries = list(scandir_it) │
│ 600 │ except OSError: │
│ 601 │ │ onerror(os.scandir, path, sys.exc_info()) │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ onerror = <function TemporaryDirectory._rmtree.<locals>.onerror at 0x0000024377164280> │ │
│ │ path = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack\\pack… │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git\\objects\\pack\\pack-85508dba7574aa155e60e221069050bca24b7bb0.idx'
The above exception was the direct cause of the following exception:
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\site-packages\click\decorators.py:26 in new_func │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\site-packages\gto\cli.py:449 in inner │
│ │
│ 446 │ │ │ error = None │
│ 447 │ │ │ try: │
│ 448 │ │ │ │ with cli_echo(): │
│ > 449 │ │ │ │ │ res = f(*iargs, **ikwargs) or {} │
│ 450 │ │ │ │ res = {f"cmd_{cmd_name}_{k}": v for k, v in res.items()} │
│ 451 │ │ │ except (ClickException, Exit, Abort) as e: │
│ 452 │ │ │ │ error = str(type(e)) │
│ │
│ ┌───────────────────────────────────── locals ─────────────────────────────────────┐ │
│ │ cmd_name = 'show' │ │
│ │ ctx = <click.core.Context object at 0x000002437710B670> │ │
│ │ error = "<class 'NotADirectoryError'>" │ │
│ │ f = <function show at 0x0000024377102B00> │ │
│ │ iargs = () │ │
│ │ ikwargs = { │ │
│ │ │ 'repo': 'https://gitlab.gwdg.de/raghava.alajangi/mlops-with-dvc', │ │
│ │ │ 'name': None, │ │
│ │ │ 'json': False, │ │
│ │ │ 'plain': False, │ │
│ │ │ 'show_name': False, │ │
│ │ │ 'show_version': False, │ │
│ │ │ 'show_stage': False, │ │
│ │ │ 'show_ref': False, │ │
│ │ │ 'registered_only': False, │ │
│ │ │ 'deprecated': False, │ │
│ │ │ ... +3 │ │
│ │ } │ │
│ │ res = {} │ │
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\site-packages\gto\cli.py:714 in show │
│ │
│ 711 │ │ ) │
│ 712 │ │ format_echo(output, "json") │
│ 713 │ else: │
│ > 714 │ │ output = gto.api.show( │
│ 715 │ │ │ repo, │
│ 716 │ │ │ name=name, │
│ 717 │ │ │ registered_only=registered_only, │
│ │
│ ┌────────────────────────────────────── locals ──────────────────────────────────────┐ │
│ │ assignments_per_version = -1 │ │
│ │ deprecated = False │ │
│ │ json = False │ │
│ │ name = None │ │
│ │ plain = False │ │
│ │ registered_only = False │ │
│ │ repo = 'https://gitlab.gwdg.de/raghava.alajangi/mlops-with-dvc' │ │
│ │ show_name = False │ │
│ │ show_options = [False, False, False, False] │ │
│ │ show_ref = False │ │
│ │ show_stage = False │ │
│ │ show_version = False │ │
│ │ sort = <VersionSort.Timestamp: 'timestamp'> │ │
│ │ versions_per_stage = 1 │ │
│ └────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\site-packages\gto\api.py:303 in show │
│ │
│ 300 │ │ │ truncate_hexsha=truncate_hexsha, │
│ 301 │ │ ) │
│ 302 │ │ if name │
│ > 303 │ │ else _show_registry( │
│ 304 │ │ │ repo, │
│ 305 │ │ │ registered_only=registered_only, │
│ 306 │ │ │ deprecated=deprecated, │
│ │
│ ┌────────────────────────────────────── locals ──────────────────────────────────────┐ │
│ │ assignments_per_version = -1 │ │
│ │ deprecated = False │ │
│ │ name = None │ │
│ │ registered_only = False │ │
│ │ repo = 'https://gitlab.gwdg.de/raghava.alajangi/mlops-with-dvc' │ │
│ │ sort = <VersionSort.Timestamp: 'timestamp'> │ │
│ │ table = True │ │
│ │ truncate_hexsha = True │ │
│ │ versions_per_stage = 1 │ │
│ └────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\site-packages\gto\api.py:331 in _show_registry │
│ │
│ 328 │ def format_hexsha(hexsha): │
│ 329 │ │ return hexsha[:7] if truncate_hexsha else hexsha │
│ 330 │ │
│ > 331 │ with GitRegistry.from_repo(repo=repo) as reg: │
│ 332 │ │ stages = list(reg.get_stages()) │
│ 333 │ │ models_state = { │
│ 334 │ │ │ o.artifact: { │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ assignments_per_version = -1 │ │
│ │ deprecated = False │ │
│ │ format_hexsha = <function _show_registry.<locals>.format_hexsha at │ │
│ │ 0x0000024377103EB0> │ │
│ │ models_state = {} │ │
│ │ reg = GitRegistry( │ │
│ │ │ repo=<git.repo.base.Repo │ │
│ │ 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git'>, │ │
│ │ │ artifact_manager=TagArtifactManager( │ │
│ │ │ │ repo=<git.repo.base.Repo │ │
│ │ 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git'>, │ │
│ │ │ │ actions=frozenset({ │ │
│ │ │ │ │ <Action.CREATE: 'create'>, │ │
│ │ │ │ │ <Action.DEPRECATE: 'deprecate'> │ │
│ │ │ │ }), │ │
│ │ │ │ config=RegistryConfig( │ │
│ │ │ │ │ INDEX='artifacts.yaml', │ │
│ │ │ │ │ TYPES=None, │ │
│ │ │ │ │ STAGES=None, │ │
│ │ │ │ │ LOG_LEVEL='INFO', │ │
│ │ │ │ │ DEBUG=False, │ │
│ │ │ │ │ ENRICHMENTS=[], │ │
│ │ │ │ │ AUTOLOAD_ENRICHMENTS=True, │ │
│ │ │ │ │ │ │
│ │ CONFIG_FILE_NAME='C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd… │ │
│ │ │ │ │ EMOJIS=True │ │
│ │ │ │ ) │ │
│ │ │ ), │ │
│ │ │ version_manager=TagVersionManager( │ │
│ │ │ │ repo=<git.repo.base.Repo │ │
│ │ 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git'>, │ │
│ │ │ │ actions=frozenset({ │ │
│ │ │ │ │ <Action.REGISTER: 'register'>, │ │
│ │ │ │ │ <Action.DEREGISTER: 'deregister'> │ │
│ │ │ │ }), │ │
│ │ │ │ config=RegistryConfig( │ │
│ │ │ │ │ INDEX='artifacts.yaml', │ │
│ │ │ │ │ TYPES=None, │ │
│ │ │ │ │ STAGES=None, │ │
│ │ │ │ │ LOG_LEVEL='INFO', │ │
│ │ │ │ │ DEBUG=False, │ │
│ │ │ │ │ ENRICHMENTS=[], │ │
│ │ │ │ │ AUTOLOAD_ENRICHMENTS=True, │ │
│ │ │ │ │ │ │
│ │ CONFIG_FILE_NAME='C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd… │ │
│ │ │ │ │ EMOJIS=True │ │
│ │ │ │ ) │ │
│ │ │ ), │ │
│ │ │ stage_manager=TagStageManager( │ │
│ │ │ │ repo=<git.repo.base.Repo │ │
│ │ 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git'>, │ │
│ │ │ │ actions=frozenset({ │ │
│ │ │ │ │ <Action.ASSIGN: 'assign'>, │ │
│ │ │ │ │ <Action.UNASSIGN: 'unassign'> │ │
│ │ │ │ }), │ │
│ │ │ │ config=RegistryConfig( │ │
│ │ │ │ │ INDEX='artifacts.yaml', │ │
│ │ │ │ │ TYPES=None, │ │
│ │ │ │ │ STAGES=None, │ │
│ │ │ │ │ LOG_LEVEL='INFO', │ │
│ │ │ │ │ DEBUG=False, │ │
│ │ │ │ │ ENRICHMENTS=[], │ │
│ │ │ │ │ AUTOLOAD_ENRICHMENTS=True, │ │
│ │ │ │ │ │ │
│ │ CONFIG_FILE_NAME='C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd… │ │
│ │ │ │ │ EMOJIS=True │ │
│ │ │ │ ) │ │
│ │ │ ), │ │
│ │ │ enrichment_manager=EnrichmentManager( │ │
│ │ │ │ repo=<git.repo.base.Repo │ │
│ │ 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git'>, │ │
│ │ │ │ actions=frozenset(), │ │
│ │ │ │ config=RegistryConfig( │ │
│ │ │ │ │ INDEX='artifacts.yaml', │ │
│ │ │ │ │ TYPES=None, │ │
│ │ │ │ │ STAGES=None, │ │
│ │ │ │ │ LOG_LEVEL='INFO', │ │
│ │ │ │ │ DEBUG=False, │ │
│ │ │ │ │ ENRICHMENTS=[], │ │
│ │ │ │ │ AUTOLOAD_ENRICHMENTS=True, │ │
│ │ │ │ │ │ │
│ │ CONFIG_FILE_NAME='C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd… │ │
│ │ │ │ │ EMOJIS=True │ │
│ │ │ │ ) │ │
│ │ │ ), │ │
│ │ │ config=RegistryConfig( │ │
│ │ │ │ INDEX='artifacts.yaml', │ │
│ │ │ │ TYPES=None, │ │
│ │ │ │ STAGES=None, │ │
│ │ │ │ LOG_LEVEL='INFO', │ │
│ │ │ │ DEBUG=False, │ │
│ │ │ │ ENRICHMENTS=[], │ │
│ │ │ │ AUTOLOAD_ENRICHMENTS=True, │ │
│ │ │ │ │ │
│ │ CONFIG_FILE_NAME='C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd… │ │
│ │ │ │ EMOJIS=True │ │
│ │ │ ) │ │
│ │ ) │ │
│ │ registered_only = False │ │
│ │ repo = 'https://gitlab.gwdg.de/raghava.alajangi/mlops-with-dvc' │ │
│ │ sort = <VersionSort.Timestamp: 'timestamp'> │ │
│ │ stages = [] │ │
│ │ table = True │ │
│ │ truncate_hexsha = True │ │
│ │ versions_per_stage = 1 │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\contextlib.py:142 in __exit__ │
│ │
│ 139 │ def __exit__(self, typ, value, traceback): │
│ 140 │ │ if typ is None: │
│ 141 │ │ │ try: │
│ > 142 │ │ │ │ next(self.gen) │
│ 143 │ │ │ except StopIteration: │
│ 144 │ │ │ │ return False │
│ 145 │ │ │ else: │
│ │
│ ┌──────────────────────────────────── locals ────────────────────────────────────┐ │
│ │ self = <contextlib._GeneratorContextManager object at 0x000002437710B8B0> │ │
│ │ traceback = None │ │
│ │ typ = None │ │
│ │ value = None │ │
│ └────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\ralajan\Anaconda3\envs\mlops\lib\site-packages\gto\git_utils.py:33 in from_repo │
│ │
│ 30 │ │ │ │ │ repo.git.checkout(branch) │
│ 31 │ │ │ │ │ yield cls.from_local_repo(repo=repo, config=config) │
│ 32 │ │ │ except (NotADirectoryError, PermissionError) as e: │
│ > 33 │ │ │ │ raise e.__class__( │
│ 34 │ │ │ │ │ "Are you using windows with python < 3.9? " │
│ 35 │ │ │ │ │ "This may be the reason of this error: https://bugs.python.org/issue │
│ 36 │ │ │ │ │ "Consider upgrading python." │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ branch = None │ │
│ │ cls = <class 'gto.registry.GitRegistry'> │ │
│ │ config = None │ │
│ │ repo = <git.repo.base.Repo 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog\\.git'> │ │
│ │ tmp_dir = 'C:\\Users\\ralajan\\AppData\\Local\\Temp\\tmprd8a4bog' │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
NotADirectoryError: Are you using windows with python < 3.9? This may be the reason of this error: https://bugs.python.org/issue42796. Consider upgrading python.
Right, thanks! There are some problems with windows, we didn't fix it completely yet. It will work if you clone the repo first.
What python version are you using? python -V
will tell that. If you're using python < 3.9, you can try using 3.9 or 3.10. It was working for 3.10 before.
Yes, it's working on a cloned project.