Fix conda env should not be cached if installing into base conda or conda existing env exists

This commit is contained in:
allegroai 2024-04-19 23:48:10 +03:00
parent 27ed6821c4
commit 441e5a73b2

View File

@ -208,7 +208,6 @@ class CondaAPI(PackageManager):
except Exception as ex: except Exception as ex:
print("WARNING: Failed using base conda environment, reverting to new environment: {}".format(ex)) print("WARNING: Failed using base conda environment, reverting to new environment: {}".format(ex))
command = Argv( command = Argv(
self.conda, self.conda,
"create", "create",
@ -273,7 +272,7 @@ class CondaAPI(PackageManager):
Conda seems to load "vcruntime140.dll" from all its environment on startup. Conda seems to load "vcruntime140.dll" from all its environment on startup.
This means environment have to be deleted using 'conda env remove'. This means environment have to be deleted using 'conda env remove'.
If necessary, conda can be fooled into deleting a partially-deleted environment by creating an empty file If necessary, conda can be fooled into deleting a partially-deleted environment by creating an empty file
in '<ENV>\conda-meta\history' (value found in 'conda.gateways.disk.test.PREFIX_MAGIC_FILE'). in '<ENV>\\conda-meta\\history' (value found in 'conda.gateways.disk.test.PREFIX_MAGIC_FILE').
Otherwise, it complains that said directory is not a conda environment. Otherwise, it complains that said directory is not a conda environment.
See: https://github.com/conda/conda/issues/7682 See: https://github.com/conda/conda/issues/7682
@ -801,6 +800,25 @@ class CondaAPI(PackageManager):
return conda_env return conda_env
return base_conda_env return base_conda_env
def add_cached_venv(self, *args, **kwargs):
"""
Copy the local venv folder into the venv cache (keys are based on the requirements+python+docker).
"""
# do not cache if this is a base conda environment
if self.conda_env_as_base_docker or self.use_conda_base_env:
return
return super().add_cached_venv(*args, **kwargs)
def get_cached_venv(self, *args, **kwargs):
"""
Copy a cached copy of the venv (based on the requirements) into destination_folder.
Return None if failed or cached entry does not exist
"""
# do not cache if this is a base conda environment
if self.conda_env_as_base_docker or self.use_conda_base_env:
return
return super().get_cached_venv(*args, **kwargs)
# enable hashing with cmp=False because pdb fails on un-hashable exceptions # enable hashing with cmp=False because pdb fails on un-hashable exceptions
exception = attrs(str=True, cmp=False) exception = attrs(str=True, cmp=False)