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 5.4 kB

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