diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index 9410f15197a8..77597db63b9b 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -375,6 +375,16 @@ def output_is_dynamic(output): def valid_input_states( self ): return model.Dataset.valid_input_states + @property + def requires_galaxy_python_environment(self): + """Indicates this tool's runtime requires Galaxy's Python environment.""" + # All special tool types (data source, history import/export, etc...) + # seem to require Galaxy's Python. + return self.tool_type != "default" or self.id in [ + "__SET_METADATA__", + "upload1", + ] + def __get_job_tool_configuration(self, job_params=None): """Generalized method for getting this tool's job configuration. @@ -1288,6 +1298,7 @@ def build_dependency_shell_commands( self, job_directory=None, metadata=False ): installed_tool_dependencies=self.installed_tool_dependencies, tool_dir=self.tool_dir, job_directory=job_directory, + preserve_python_environment=self.requires_galaxy_python_environment, metadata=metadata, ) diff --git a/lib/galaxy/tools/deps/resolvers/conda.py b/lib/galaxy/tools/deps/resolvers/conda.py index 13477f771008..a66a993b1cd4 100644 --- a/lib/galaxy/tools/deps/resolvers/conda.py +++ b/lib/galaxy/tools/deps/resolvers/conda.py @@ -164,6 +164,8 @@ def resolve(self, name, version, type, **kwds): log.warning("Conda dependency resolver not sent job directory.") return NullDependency(version=version, name=name) + preserve_python_environment = kwds.get("preserve_python_environment", False) + if not is_installed and self.auto_install: is_installed = self.install_dependency(name=name, version=version, type=type) @@ -190,7 +192,8 @@ def resolve(self, name, version, type, **kwds): conda_environment, exact, name, - version + version, + preserve_python_environment, ) else: if len(conda_environment) > 79: @@ -247,12 +250,13 @@ class CondaDependency(Dependency): dict_collection_visible_keys = Dependency.dict_collection_visible_keys + ['environment_path', 'name', 'version'] dependency_type = 'conda' - def __init__(self, activate, environment_path, exact, name=None, version=None): + def __init__(self, activate, environment_path, exact, name=None, version=None, preserve_python_environment=False): self.activate = activate self.environment_path = environment_path self._exact = exact self._name = name self._version = version + self._preserve_python_environment = preserve_python_environment @property def exact(self): @@ -267,11 +271,16 @@ def version(self): return self._version def shell_commands(self, requirement): - return """[ "$CONDA_DEFAULT_ENV" = "%s" ] || . %s '%s' 2>&1 """ % ( - self.environment_path, - self.activate, - self.environment_path - ) + if self._preserve_python_environment: + return """export PATH=$PATH:'%s/bin' """ % ( + self.environment_path, + ) + else: + return """[ "$CONDA_DEFAULT_ENV" = "%s" ] || . %s '%s' 2>&1 """ % ( + self.environment_path, + self.activate, + self.environment_path + ) def _string_as_bool( value ):