41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
import sys
|
|
import importlib
|
|
from pathlib import Path
|
|
|
|
PKGS_DIR = Path(__file__).parent
|
|
|
|
VENDORED_PKGS = [
|
|
'abx',
|
|
# 'abx-pkg',
|
|
# ... everything else in archivebox/pkgs/* comes after ...
|
|
]
|
|
|
|
# VENDORED_PKGS += [ ... ./pkgs/* ... ]
|
|
for subdir in reversed(sorted(PKGS_DIR.iterdir())):
|
|
if subdir.is_dir() and subdir.name not in VENDORED_PKGS and not subdir.name.startswith('_'):
|
|
VENDORED_PKGS.append(subdir.name)
|
|
|
|
|
|
def load_vendored_pkgs():
|
|
"""Add archivebox/pkgs to sys.path and import all vendored python packages present within"""
|
|
if str(PKGS_DIR) not in sys.path:
|
|
sys.path.append(str(PKGS_DIR))
|
|
|
|
for pkg_name in VENDORED_PKGS:
|
|
pkg_dir = PKGS_DIR / pkg_name
|
|
assert pkg_dir.is_dir(), f'Required vendored pkg {pkg_name} could not be found in {pkg_dir}'
|
|
|
|
try:
|
|
lib = importlib.import_module(pkg_name)
|
|
# print(f"Successfully imported lib from environment {pkg_name}")
|
|
except ImportError:
|
|
sys.path.append(str(pkg_dir)) # perhaps the pkg is in a subdirectory of the directory
|
|
try:
|
|
lib = importlib.import_module(pkg_name)
|
|
# print(f"Successfully imported lib from vendored fallback {pkg_name}: {inspect.getfile(lib)}")
|
|
except ImportError as e:
|
|
print(f"Failed to import required pkg from sys.path or archivebox/pkgs dir {pkg_name}: {e}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
|