-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrequirements_installer.py
More file actions
56 lines (48 loc) · 2.36 KB
/
requirements_installer.py
File metadata and controls
56 lines (48 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import os
import importlib.util
import subprocess
import sys
import pkg_resources
def check_and_install_requirements(requirements_file):
"""Check and install requirements from a requirements.txt file"""
if os.path.exists(requirements_file):
try:
with open(requirements_file, 'r') as f:
requirements = [line.strip() for line in f if line.strip() and not line.startswith('#')]
if not requirements:
return
for req in requirements:
# Parse package name and version
package_spec = req.split('==')[0].split('>=')[0].split('<=')[0].strip()
try:
# Check if package is installed using pkg_resources
pkg_resources.get_distribution(package_spec)
print(f"[QHNodes] Dependency satisfied: {req}")
except pkg_resources.DistributionNotFound:
print(f"[QHNodes] Installing: {req}")
subprocess.check_call([sys.executable, "-m", "pip", "install", req])
except Exception as e:
print(f"[QHNodes] Error installing requirements: {e}")
def install_dependencies(base_dir):
"""Install dependencies for main repo and all submodules"""
# Check main repo requirements
main_requirements = os.path.join(base_dir, "requirements.txt")
check_and_install_requirements(main_requirements)
# Check submodule requirements
external_nodes_dir = os.path.join(base_dir, "external_nodes")
if os.path.exists(external_nodes_dir):
submodules = [d for d in os.listdir(external_nodes_dir)
if os.path.isdir(os.path.join(external_nodes_dir, d))]
if submodules:
for submodule in submodules:
requirements_file = os.path.join(external_nodes_dir, submodule, "requirements.txt")
check_and_install_requirements(requirements_file)
def ensure_dependencies():
"""Ensure all dependencies are installed"""
try:
print("[QHNodes] Checking dependencies...")
base_dir = os.path.dirname(os.path.abspath(__file__))
install_dependencies(base_dir)
except Exception as e:
print(f"[QHNodes] Error during dependency installation: {e}")
print("[QHNodes] Please try installing dependencies manually")