Browse Source

Update launch_utils.py to fix wrong dep. checks and reinstalls

Fixes failing dependency checks for extensions having a different package name and import name (for example ffmpeg-python / ffmpeg), which currently is causing the unneeded reinstall of packages at runtime.

In fact with current code, the same string is used when installing a package and when checking for its presence, as you can see in the following example:

> launch_utils.run_pip("install ffmpeg-python", "required package")
[ Installing required package: "ffmpeg-python" ... ]
[ Installed ]

> launch_utils.is_installed("ffmpeg-python")
False

... which would actually return true with:

> launch_utils.is_installed("ffmpeg")
True
illtellyoulater 1 year ago
parent
commit
639ccf254b
1 changed files with 10 additions and 4 deletions
  1. 10 4
      modules/launch_utils.py

+ 10 - 4
modules/launch_utils.py

@@ -6,6 +6,7 @@ import os
 import shutil
 import shutil
 import sys
 import sys
 import importlib.util
 import importlib.util
+import importlib.metadata
 import platform
 import platform
 import json
 import json
 from functools import lru_cache
 from functools import lru_cache
@@ -119,11 +120,16 @@ def run(command, desc=None, errdesc=None, custom_env=None, live: bool = default_
 
 
 def is_installed(package):
 def is_installed(package):
     try:
     try:
-        spec = importlib.util.find_spec(package)
-    except ModuleNotFoundError:
-        return False
+    	dist = importlib.metadata.distribution(package)
+    except importlib.metadata.PackageNotFoundError:
+        try: 
+            spec = importlib.util.find_spec(package)
+        except ModuleNotFoundError:
+    	    return False
 
 
-    return spec is not None
+        return spec is not None
+
+    return dist is not None
 
 
 
 
 def repo_dir(name):
 def repo_dir(name):