You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

__init__.py 4.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. # -*- coding: utf-8 -*-
  2. import atexit
  3. import ctypes
  4. import re
  5. import os
  6. import platform
  7. import sys
  8. if os.getenv("TERMUX_VERSION"):
  9. try:
  10. import cv2
  11. except Exception as exc:
  12. print("Run MegEngine python interface at Android/Termux env")
  13. print("!!!You need build opencv-python manually!!!, by run sh:")
  14. print(
  15. "https://github.com/MegEngine/MegEngine/blob/master/scripts/whl/android/android_opencv_python.sh"
  16. )
  17. raise exc
  18. if sys.platform == "win32":
  19. lib_path = os.path.join(os.path.dirname(__file__), "core/lib")
  20. dll_paths = list(filter(os.path.exists, [lib_path,]))
  21. assert len(dll_paths) > 0
  22. kernel32 = ctypes.WinDLL("kernel32.dll", use_last_error=True)
  23. has_load_library_attr = hasattr(kernel32, "AddDllDirectory")
  24. old_error_mode = kernel32.SetErrorMode(0x0001)
  25. kernel32.LoadLibraryW.restype = ctypes.c_void_p
  26. if has_load_library_attr:
  27. kernel32.AddDllDirectory.restype = ctypes.c_void_p
  28. kernel32.LoadLibraryExW.restype = ctypes.c_void_p
  29. for dll_path in dll_paths:
  30. if sys.version_info >= (3, 8):
  31. os.add_dll_directory(dll_path)
  32. elif has_load_library_attr:
  33. res = kernel32.AddDllDirectory(dll_path)
  34. if res is None:
  35. err = ctypes.WinError(ctypes.get_last_error())
  36. err.strerror += ' Error adding "{}" to the DLL search PATH.'.format(
  37. dll_path
  38. )
  39. raise err
  40. else:
  41. print("WARN: python or OS env have some issue, may load DLL failed!!!")
  42. import glob
  43. dlls = glob.glob(os.path.join(lib_path, "*.dll"))
  44. path_patched = False
  45. for dll in dlls:
  46. is_loaded = False
  47. if has_load_library_attr:
  48. res = kernel32.LoadLibraryExW(dll, None, 0x00001100)
  49. last_error = ctypes.get_last_error()
  50. if res is None and last_error != 126:
  51. err = ctypes.WinError(last_error)
  52. err.strerror += ' Error loading "{}" or one of its dependencies.'.format(
  53. dll
  54. )
  55. err.strerror += " \nplease install VC runtime from: "
  56. err.strerror += " \nhttps://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-160"
  57. raise err
  58. elif res is not None:
  59. is_loaded = True
  60. if not is_loaded:
  61. if not path_patched:
  62. os.environ["PATH"] = ";".join(dll_paths + [os.environ["PATH"]])
  63. path_patched = True
  64. res = kernel32.LoadLibraryW(dll)
  65. if res is None:
  66. err = ctypes.WinError(ctypes.get_last_error())
  67. err.strerror += ' Error loading "{}" or one of its dependencies.'.format(
  68. dll
  69. )
  70. err.strerror += " \nplease install VC runtime from: "
  71. err.strerror += " \nhttps://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-160"
  72. raise err
  73. kernel32.SetErrorMode(old_error_mode)
  74. from .core._imperative_rt.core2 import close as _close
  75. from .core._imperative_rt.core2 import full_sync as _full_sync
  76. from .core._imperative_rt.core2 import sync as _sync
  77. from .core._imperative_rt.common import (
  78. get_supported_sm_versions as _get_supported_sm_versions,
  79. )
  80. from .config import *
  81. from .device import *
  82. from .logger import enable_debug_log, get_logger, set_log_file, set_log_level
  83. from .serialization import load, save
  84. from .tensor import Parameter, Tensor, tensor
  85. from .utils import comp_graph_tools as cgtools
  86. from .utils.persistent_cache import PersistentCacheOnServer as _PersistentCacheOnServer
  87. from .version import __version__
  88. _exit_handlers = []
  89. def _run_exit_handlers():
  90. for handler in reversed(_exit_handlers):
  91. handler()
  92. _exit_handlers.clear()
  93. atexit.register(_run_exit_handlers)
  94. def _exit(code):
  95. _run_exit_handlers()
  96. sys.exit(code)
  97. def _atexit(handler):
  98. _exit_handlers.append(handler)
  99. _atexit(_close)
  100. _persistent_cache = _PersistentCacheOnServer()
  101. _persistent_cache.reg()
  102. _atexit(_persistent_cache.flush)
  103. # subpackages
  104. import megengine.amp
  105. import megengine.autodiff
  106. import megengine.config
  107. import megengine.data
  108. import megengine.distributed
  109. import megengine.dtr
  110. import megengine.functional
  111. import megengine.hub
  112. import megengine.jit
  113. import megengine.module
  114. import megengine.optimizer
  115. import megengine.quantization
  116. import megengine.random
  117. import megengine.utils
  118. import megengine.traced_module