Tengo un módulo de Python, wrapper.py
, que envuelve una DLL de C. La DLL se encuentra en la misma carpeta que el módulo. Por lo tanto, yo uso el siguiente código para cargarlo:Python ctypes: cargando DLL desde una ruta relativa
myDll = ctypes.CDLL("MyCDLL.dll")
Esto funciona si ejecuto wrapper.py
de su propia carpeta. Sin embargo, si lo ejecuto desde otro lugar, falla. Eso es porque ctypes calcula la ruta relativa al directorio de trabajo actual.
Mi pregunta es, ¿hay alguna manera de que pueda especificar la ruta de la DLL en relación con el contenedor en lugar del directorio de trabajo actual? Eso me permitirá enviar los dos juntos y permitir al usuario ejecutar/importar el contenedor desde cualquier lugar.
Utilizo el enfoque en [respuesta seleccionada] (http://stackoverflow.com/a/2980501/1020470) pero en un caso tuve un dll que importó una exportación de otro dll y no se cargaba . La solución fue cargar el otro dll primero, EG: '_DIRNAME = os.path.dirname (__ file__); required_dll = ctypes.cdll.LoadLibrary (os.path.join (_DIRNAME, required.dll)); main_dll = ctypes.cdll.LoadLibrary (os.path.join (_DIRNAME, main.dll)) 'voila que funciona! –