]> jfr.im git - yt-dlp.git/blame - yt_dlp/dependencies/__init__.py
[ie/mlbtv] Fix extraction (#10296)
[yt-dlp.git] / yt_dlp / dependencies / __init__.py
CommitLineData
9b8ee23b 1# flake8: noqa: F401
1d485a1a 2"""Imports all optional dependencies for the project.
962ffcf8 3An attribute "_yt_dlp__identifier" may be inserted into the module if it uses an ambiguous namespace"""
9b8ee23b 4
5try:
6 import brotlicffi as brotli
7except ImportError:
8 try:
9 import brotli
10 except ImportError:
11 brotli = None
12
13
14try:
15 import certifi
16except ImportError:
17 certifi = None
18else:
19 from os.path import exists as _path_exists
20
21 # The certificate may not be bundled in executable
22 if not _path_exists(certifi.where()):
23 certifi = None
24
25
9b8ee23b 26try:
27 import mutagen
28except ImportError:
29 mutagen = None
30
31
32secretstorage = None
33try:
34 import secretstorage
35 _SECRETSTORAGE_UNAVAILABLE_REASON = None
36except ImportError:
37 _SECRETSTORAGE_UNAVAILABLE_REASON = (
38 'as the `secretstorage` module is not installed. '
39 'Please install by running `python3 -m pip install secretstorage`')
40except Exception as _err:
41 _SECRETSTORAGE_UNAVAILABLE_REASON = f'as the `secretstorage` module could not be initialized. {_err}'
42
43
44try:
45 import sqlite3
35f9a306 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
9b8ee23b 48except ImportError:
47ab66db 49 # although sqlite3 is part of the standard library, it is possible to compile Python without
9b8ee23b 50 # sqlite support. See: https://github.com/yt-dlp/yt-dlp/issues/544
51 sqlite3 = None
52
53
54try:
55 import websockets
ed3bb2b0 56except ImportError:
9b8ee23b 57 websockets = None
58
8a8b5452 59try:
60 import urllib3
61except ImportError:
62 urllib3 = None
63
64try:
65 import requests
66except ImportError:
67 requests = None
9b8ee23b 68
6f7563be 69try:
70 import xattr # xattr or pyxattr
71except ImportError:
72 xattr = None
73else:
74 if hasattr(xattr, 'set'): # pyxattr
75 xattr._yt_dlp__identifier = 'pyxattr'
76
52f5be1f 77try:
78 import curl_cffi
79except ImportError:
80 curl_cffi = None
6f7563be 81
f6a765ce 82from . import Cryptodome
83
9b8ee23b 84all_dependencies = {k: v for k, v in globals().items() if not k.startswith('_')}
f6a765ce 85available_dependencies = {k: v for k, v in all_dependencies.items() if v}
9b8ee23b 86
87
f6a765ce 88# Deprecated
65f6e807 89Cryptodome_AES = Cryptodome.AES
9b8ee23b 90
91
92__all__ = [
93 'all_dependencies',
94 'available_dependencies',
95 *all_dependencies.keys(),
96]