__init__.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import os
  2. import ctypes
  3. def load_shared_library(libname, paths):
  4. for path in paths:
  5. lib_path = os.path.join(path, libname)
  6. if os.path.exists(lib_path):
  7. return ctypes.CDLL(lib_path, mode=ctypes.RTLD_GLOBAL)
  8. raise FileNotFoundError(
  9. f"Shared library {libname} not found in {paths}"
  10. )
  11. # Search LD_LIBRARY_PATH
  12. ld_paths = os.environ.get("LD_LIBRARY_PATH", "").split(":")
  13. if not any(ld_paths):
  14. # Path to the bundled `lib/` directory inside site-packages
  15. package_dir = os.path.abspath(os.path.dirname(__file__))
  16. internal_lib_dir = [os.path.join(package_dir, 'lib')]
  17. # Shared libraries required
  18. shared_libs = [
  19. 'libgomp.so',
  20. 'libOPENFHEcore.so.1',
  21. 'libOPENFHEbinfhe.so.1',
  22. 'libOPENFHEpke.so.1',
  23. ]
  24. for libname in shared_libs:
  25. load_shared_library(libname, internal_lib_dir)
  26. from .openfhe import *
  27. else:
  28. # Shared libraries required
  29. # skip 'libgomp.so' if LD_LIBRARY_PATH is set as we should get it from the libgomp.so location
  30. shared_libs = [
  31. 'libOPENFHEcore.so.1',
  32. 'libOPENFHEbinfhe.so.1',
  33. 'libOPENFHEpke.so.1',
  34. ]
  35. for libname in shared_libs:
  36. load_shared_library(libname, ld_paths)
  37. # from .openfhe import *