diff --git a/music_assistant/helpers/util.py b/music_assistant/helpers/util.py
index e91cd933..ed96d9b5 100644
--- a/music_assistant/helpers/util.py
+++ b/music_assistant/helpers/util.py
@@ -602,30 +602,11 @@ def _get_provider_module(domain: str) -> ProviderModuleType:
             "ProviderModuleType", importlib.import_module(f".{domain}", "music_assistant.providers")
         )
 
-    # ensure module requirements are met
-    for requirement in requirements:
-        if "==" not in requirement:
-            # we should really get rid of unpinned requirements
-            continue
-        package_name, version = requirement.split("==", 1)
-        installed_version = await get_package_version(package_name)
-        if installed_version == "0.0.0":
-            # ignore editable installs
-            continue
-        if installed_version != version:
-            await install_package(requirement)
-
     # try to load the module
     try:
         return await asyncio.to_thread(_get_provider_module, domain)
     except ImportError:
-        # (re)install ALL requirements
-        for requirement in requirements:
-            await install_package(requirement)
-    # try loading the provider again to be safe
-    # this will fail if something else is wrong (as it should)
-    return await asyncio.to_thread(_get_provider_module, domain)
-
+        raise RuntimeError(f"Configure {domain} in `services.music-assistant.providers` to install the required dependencies.")
 
 async def has_tmpfs_mount() -> bool:
     """Check if we have a tmpfs mount."""
diff --git a/music_assistant/providers/ytmusic/__init__.py b/music_assistant/providers/ytmusic/__init__.py
index 0ac8a70f..5d74e25b 100644
--- a/music_assistant/providers/ytmusic/__init__.py
+++ b/music_assistant/providers/ytmusic/__init__.py
@@ -203,7 +203,6 @@ class YoutubeMusicProvider(MusicProvider):
     async def handle_async_init(self) -> None:
         """Set up the YTMusic provider."""
         logging.getLogger("yt_dlp").setLevel(self.logger.level + 10)
-        await self._install_packages()
         self._cookie = str(self.config.get_value(CONF_COOKIE))
         self._po_token_server_url = (
             self.config.get_value(CONF_PO_TOKEN_SERVER_URL) or DEFAULT_PO_TOKEN_SERVER_URL
@@ -1103,8 +1102,6 @@ async def _install_packages(self) -> None:
         # NOTE: Google breaks things quite often which requires us to update
         # some packages very frequently. Installing them dynamically prevents
         # us from having to update MA to ensure this provider works.
-        for package_name in PACKAGES_TO_INSTALL:
-            await install_package(package_name)
         # verify if the yt_dlp package is usable
         try:
             await asyncio.to_thread(importlib.import_module, "yt_dlp")
