JMOT

 1import importlib
 2import subprocess
 3import sys
 4
 5REQUIRED_PACKAGES = {
 6    "numpy": None
 7}
 8
 9def _install_package(package_name, version_spec=None):
10    try:
11        if version_spec:
12            subprocess.check_call([sys.executable, "-m", "pip", "install", f"{package_name}{version_spec}"])
13        else:
14            subprocess.check_call([sys.executable, "-m", "pip", "install", package_name])
15    except subprocess.CalledProcessError as e:
16        print(f"Failed to install {package_name}: {e}")
17        raise
18
19def _validate_dependencies():
20    for package, version_spec in REQUIRED_PACKAGES.items():
21        try:
22            module = importlib.import_module(package)
23            if version_spec:
24                version = getattr(module, "__version__", None)
25                if version and not eval(f"'{version}' {version_spec}"):
26                    _install_package(package, version_spec)
27        except ImportError:
28            _install_package(package, version_spec)
29
30_validate_dependencies()
31
32import JMOT.connect, JMOT.craft, JMOT.planet, JMOT.part, JMOT.extra, JMOT.time, JMOT.control, JMOT.misc
33__all__ = ['connect', 'craft', 'planet', 'part', 'extra', 'time', 'control', 'misc']
34__version__ = "0.3.a1"
35
36__pdoc__ = {
37    '_verify': False,
38    '_send_message_with_length': False,
39    '_receive_message_with_length': False,
40    '_convert_value': False,
41    '_parse_message_to_list': False,
42    '_send_message': False,
43    '_CONTROL_SIGNAL': False,
44    '_CRAFT_INFO_SIGNAL': False,
45    '_CRAFT_FUEL_SIGNAL': False,
46    '_CRAFT_PERFORMANCE_SIGNAL': False,
47    '_CRAFT_POSITION_SIGNAL': False,
48    '_CRAFT_ATTITUDE_SIGNAL': False,
49    '_CRAFT_VELOCITY_SIGNAL': False,
50    '_CRAFT_ORBIT_SIGNAL': False,
51    '_CRAFT_INPUT_SIGNAL': False,
52    '_CRAFT_STATUS_SIGNAL': False,
53    '_MISC_CONVERT_SIGNALS': False,
54    '_MISC_CAMERA_SIGNALS': False,
55    '_MISC_FUNK_SIGNALS': False,
56    '_PLANET_INFO_SIGNALS': False,
57    '_PLANET_ATMOSPHERE_SIGNALS': False,
58    '_PLANET_ORBIT_SIGNALS': False,
59    '_PART_SIGNALS': False,
60    '_TIME_SIGNALS': False
61}