diff options
author | jaseg <git@jaseg.de> | 2024-08-14 11:05:01 +0200 |
---|---|---|
committer | jaseg <git@jaseg.de> | 2024-08-14 11:05:01 +0200 |
commit | 16cd0b338e50419713b2d7bd8fea956cb593c303 (patch) | |
tree | cbe9add132fb43b75758946295fc93d5c9a721fd /mpv.py | |
parent | 3d09f5199e73dd010b22e81709452cc0117d73e7 (diff) | |
download | python-mpv-16cd0b338e50419713b2d7bd8fea956cb593c303.tar.gz python-mpv-16cd0b338e50419713b2d7bd8fea956cb593c303.tar.bz2 python-mpv-16cd0b338e50419713b2d7bd8fea956cb593c303.zip |
Windows: Look for mpv.dll next to mpv.py
Diffstat (limited to 'mpv.py')
-rw-r--r-- | mpv.py | 26 |
1 files changed, 19 insertions, 7 deletions
@@ -2,7 +2,7 @@ # vim: ts=4 sw=4 et # # Python MPV library module -# Copyright (C) 2017-2022 Sebastian Götte <code@jaseg.net> +# Copyright (C) 2017-2024 Sebastian Götte <code@jaseg.net> # # python-mpv inherits the underlying libmpv's license, which can be either GPLv2 or later (default) or LGPLv2.1 or # later. For details, see the mpv copyright page here: https://github.com/mpv-player/mpv/blob/master/Copyright @@ -24,6 +24,7 @@ import ctypes.util import threading import queue import os +import os.path import sys from warnings import warn from functools import partial, wraps @@ -35,19 +36,30 @@ import traceback if os.name == 'nt': # Note: mpv-2.dll with API version 2 corresponds to mpv v0.35.0. Most things should work with the fallback, too. - dll = ctypes.util.find_library('mpv-2.dll') or ctypes.util.find_library('libmpv-2.dll') or ctypes.util.find_library('mpv-1.dll') - if dll is None: - raise OSError('Cannot find mpv-1.dll, mpv-2.dll or libmpv-2.dll in your system %PATH%. One way to deal with this is to ship the dll with your script and put the directory your script is in into %PATH% before "import mpv": os.environ["PATH"] = os.path.dirname(__file__) + os.pathsep + os.environ["PATH"] If mpv-1.dll is located elsewhere, you can add that path to os.environ["PATH"].') - # flags argument: LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR - # cf. https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa + names = ['mpv-2.dll', 'libmpv-2.dll', 'mpv-1.dll'] + for name in names: + dll = ctypes.util.find_library(name) + if dll: + break + else: + for name in names: + dll = os.path.join(os.path.dirname(__file__), name) + if os.path.isfile(dll): + break + else: + raise OSError('Cannot find mpv-1.dll, mpv-2.dll or libmpv-2.dll in your system %PATH%. One way to deal with this is to ship the dll with your script and put the directory your script is in into %PATH% before "import mpv": os.environ["PATH"] = os.path.dirname(__file__) + os.pathsep + os.environ["PATH"] If mpv-1.dll is located elsewhere, you can add that path to os.environ["PATH"].') + try: + # flags argument: LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR + # cf. https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa backend = CDLL(dll, 0x00001000 | 0x00000100) except Exception as e: - if not os.path.isabs(dll): + if not os.path.isabs(dll): # can only be find_library, not the "look next to mpv.py" thing raise OSError(f'ctypes.find_library found mpv.dll at {dll}, but ctypes.CDLL could not load it. It looks like find_library found mpv.dll under a relative path entry in %PATH%. Please make sure all paths in %PATH% are absolute. Instead of trying to load mpv.dll from the current working directory, put it somewhere next to your script and add that path to %PATH% using os.environ["PATH"] = os.path.dirname(__file__) + os.pathsep + os.environ["PATH"]') from e else: raise OSError(f'ctypes.find_library found mpv.dll at {dll}, but ctypes.CDLL could not load it.') from e fs_enc = 'utf-8' + else: import locale lc, enc = locale.getlocale(locale.LC_NUMERIC) |