transport: make libusb_package optional
diff --git a/bumble/transport/pyusb.py b/bumble/transport/pyusb.py
index e0757fd..f804d66 100644
--- a/bumble/transport/pyusb.py
+++ b/bumble/transport/pyusb.py
@@ -20,7 +20,6 @@
 import threading
 import time
 
-import libusb_package
 import usb.core
 import usb.util
 from colors import color
@@ -205,16 +204,24 @@
             await self.sink.stop()
             usb.util.release_interface(self.device, 0)
 
+    usb_find =  usb.core.find
+    try:
+        import libusb_package
+    except ImportError:
+        logger.debug('libusb_package is not available')
+    else:
+        usb_find = libusb_package.find
+
     # Find the device according to the spec moniker
     if ':' in spec:
         vendor_id, product_id = spec.split(':')
-        device = libusb_package.find(
+        device = usb_find(
             idVendor=int(vendor_id, 16), idProduct=int(product_id, 16)
         )
     else:
         device_index = int(spec)
         devices = list(
-            libusb_package.find(
+            usb_find(
                 find_all=1,
                 bDeviceClass=USB_DEVICE_CLASS_WIRELESS_CONTROLLER,
                 bDeviceSubClass=USB_DEVICE_SUBCLASS_RF_CONTROLLER,
diff --git a/bumble/transport/usb.py b/bumble/transport/usb.py
index 173e1b3..928e5b5 100644
--- a/bumble/transport/usb.py
+++ b/bumble/transport/usb.py
@@ -22,7 +22,6 @@
 import ctypes
 import platform
 
-import libusb_package
 import usb1
 from colors import color
 
@@ -45,11 +44,16 @@
     If the library does not exists, do nothing and usb1 will search default system paths
     when usb1.USBContext is created.
     '''
-    if libusb_path := libusb_package.get_library_path():
-        logger.debug(f'loading libusb library at {libusb_path}')
-        dll_loader = ctypes.WinDLL if platform.system() == 'Windows' else ctypes.CDLL
-        libusb_dll = dll_loader(str(libusb_path), use_errno=True, use_last_error=True)
-        usb1.loadLibrary(libusb_dll)
+    try:
+        import libusb_package
+    except ImportError:
+        logger.debug('libusb_package is not available')
+    else:
+        if libusb_path := libusb_package.get_library_path():
+            logger.debug(f'loading libusb library at {libusb_path}')
+            dll_loader = ctypes.WinDLL if platform.system() == 'Windows' else ctypes.CDLL
+            libusb_dll = dll_loader(str(libusb_path), use_errno=True, use_last_error=True)
+            usb1.loadLibrary(libusb_dll)
 
 
 async def open_usb_transport(spec):