mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 00:25:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# flake8: noqa: F401
 | 
						|
"""Imports all optional dependencies for the project.
 | 
						|
An attribute "_yt_dlp__identifier" may be inserted into the module if it uses an ambiguous namespace"""
 | 
						|
 | 
						|
try:
 | 
						|
    import brotlicffi as brotli
 | 
						|
except ImportError:
 | 
						|
    try:
 | 
						|
        import brotli
 | 
						|
    except ImportError:
 | 
						|
        brotli = None
 | 
						|
 | 
						|
 | 
						|
try:
 | 
						|
    import certifi
 | 
						|
except ImportError:
 | 
						|
    certifi = None
 | 
						|
else:
 | 
						|
    from os.path import exists as _path_exists
 | 
						|
 | 
						|
    # The certificate may not be bundled in executable
 | 
						|
    if not _path_exists(certifi.where()):
 | 
						|
        certifi = None
 | 
						|
 | 
						|
 | 
						|
try:
 | 
						|
    from Cryptodome.Cipher import AES as Cryptodome_AES
 | 
						|
except ImportError:
 | 
						|
    try:
 | 
						|
        from Crypto.Cipher import AES as Cryptodome_AES
 | 
						|
    except (ImportError, SyntaxError):  # Old Crypto gives SyntaxError in newer Python
 | 
						|
        Cryptodome_AES = None
 | 
						|
    else:
 | 
						|
        try:
 | 
						|
            # In pycrypto, mode defaults to ECB. See:
 | 
						|
            # https://www.pycryptodome.org/en/latest/src/vs_pycrypto.html#:~:text=not%20have%20ECB%20as%20default%20mode
 | 
						|
            Cryptodome_AES.new(b'abcdefghijklmnop')
 | 
						|
        except TypeError:
 | 
						|
            pass
 | 
						|
        else:
 | 
						|
            Cryptodome_AES._yt_dlp__identifier = 'pycrypto'
 | 
						|
 | 
						|
 | 
						|
try:
 | 
						|
    import mutagen
 | 
						|
except ImportError:
 | 
						|
    mutagen = None
 | 
						|
 | 
						|
 | 
						|
secretstorage = None
 | 
						|
try:
 | 
						|
    import secretstorage
 | 
						|
    _SECRETSTORAGE_UNAVAILABLE_REASON = None
 | 
						|
except ImportError:
 | 
						|
    _SECRETSTORAGE_UNAVAILABLE_REASON = (
 | 
						|
        'as the `secretstorage` module is not installed. '
 | 
						|
        'Please install by running `python3 -m pip install secretstorage`')
 | 
						|
except Exception as _err:
 | 
						|
    _SECRETSTORAGE_UNAVAILABLE_REASON = f'as the `secretstorage` module could not be initialized. {_err}'
 | 
						|
 | 
						|
 | 
						|
try:
 | 
						|
    import sqlite3
 | 
						|
except ImportError:
 | 
						|
    # although sqlite3 is part of the standard library, it is possible to compile python without
 | 
						|
    # sqlite support. See: https://github.com/yt-dlp/yt-dlp/issues/544
 | 
						|
    sqlite3 = None
 | 
						|
 | 
						|
 | 
						|
try:
 | 
						|
    import websockets
 | 
						|
except (ImportError, SyntaxError):
 | 
						|
    # websockets 3.10 on python 3.6 causes SyntaxError
 | 
						|
    # See https://github.com/yt-dlp/yt-dlp/issues/2633
 | 
						|
    websockets = None
 | 
						|
 | 
						|
 | 
						|
try:
 | 
						|
    import xattr  # xattr or pyxattr
 | 
						|
except ImportError:
 | 
						|
    xattr = None
 | 
						|
else:
 | 
						|
    if hasattr(xattr, 'set'):  # pyxattr
 | 
						|
        xattr._yt_dlp__identifier = 'pyxattr'
 | 
						|
 | 
						|
 | 
						|
all_dependencies = {k: v for k, v in globals().items() if not k.startswith('_')}
 | 
						|
 | 
						|
 | 
						|
available_dependencies = {k: v for k, v in all_dependencies.items() if v}
 | 
						|
 | 
						|
 | 
						|
__all__ = [
 | 
						|
    'all_dependencies',
 | 
						|
    'available_dependencies',
 | 
						|
    *all_dependencies.keys(),
 | 
						|
]
 |