2 """Imports all optional dependencies for the project.
3 An attribute "_yt_dlp__identifier" may be inserted into the module if it uses an ambiguous namespace"""
6 import brotlicffi
as brotli
19 from os
.path
import exists
as _path_exists
21 # The certificate may not be bundled in executable
22 if not _path_exists(certifi
.where()):
35 _SECRETSTORAGE_UNAVAILABLE_REASON
= None
37 _SECRETSTORAGE_UNAVAILABLE_REASON
= (
38 'as the `secretstorage` module is not installed. '
39 'Please install by running `python3 -m pip install secretstorage`')
40 except Exception as _err
:
41 _SECRETSTORAGE_UNAVAILABLE_REASON
= f
'as the `secretstorage` module could not be initialized. {_err}'
46 # We need to get the underlying `sqlite` version, see https://github.com/yt-dlp/yt-dlp/issues/8152
47 sqlite3
._yt_dlp__version
= sqlite3
.sqlite_version
49 # although sqlite3 is part of the standard library, it is possible to compile python without
50 # sqlite support. See: https://github.com/yt-dlp/yt-dlp/issues/544
56 except (ImportError, SyntaxError):
57 # websockets 3.10 on python 3.6 causes SyntaxError
58 # See https://github.com/yt-dlp/yt-dlp/issues/2633
72 import xattr
# xattr or pyxattr
76 if hasattr(xattr
, 'set'): # pyxattr
77 xattr
._yt
_dlp
__identifier
= 'pyxattr'
80 from . import Cryptodome
82 all_dependencies
= {k
: v
for k
, v
in globals().items() if not k
.startswith('_')}
83 available_dependencies
= {k
: v
for k
, v
in all_dependencies
.items() if v
}
87 Cryptodome_AES
= Cryptodome
.AES
92 'available_dependencies',
93 *all_dependencies
.keys(),