aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Sawicki <contact@grub4k.xyz>2024-10-13 03:50:31 +0200
committerGitHub <noreply@github.com>2024-10-13 03:50:31 +0200
commit1a830394a21a81a3e9918f9e175abc9fbb21f089 (patch)
treef8e9b7d288443923e56922947bcf1148043d98af
parentedfd095b1917701c5046bd51f9542897c17d41a7 (diff)
[build] `make_lazy_extractors`: Force running without plugins (#11205)
Authored by: Grub4K
-rw-r--r--README.md3
-rw-r--r--devscripts/make_lazy_extractors.py27
-rw-r--r--yt_dlp/YoutubeDL.py4
-rw-r--r--yt_dlp/plugins.py3
4 files changed, 13 insertions, 24 deletions
diff --git a/README.md b/README.md
index 4b1ada82e..1cafe51d5 100644
--- a/README.md
+++ b/README.md
@@ -278,7 +278,7 @@ py -m bundle.py2exe
* **`devscripts/update-version.py`** - Update the version number based on the current date.
* **`devscripts/set-variant.py`** - Set the build variant of the executable.
* **`devscripts/make_changelog.py`** - Create a markdown changelog using short commit messages and update `CONTRIBUTORS` file.
-* **`devscripts/make_lazy_extractors.py`** - Create lazy extractors. Running this before building the binaries (any variant) will improve their startup performance. Set the environment variable `YTDLP_NO_LAZY_EXTRACTORS=1` if you wish to forcefully disable lazy extractor loading.
+* **`devscripts/make_lazy_extractors.py`** - Create lazy extractors. Running this before building the binaries (any variant) will improve their startup performance. Set the environment variable `YTDLP_NO_LAZY_EXTRACTORS` to something nonempty to forcefully disable lazy extractor loading.
Note: See their `--help` for more info.
@@ -1898,6 +1898,7 @@ In other words, the file structure on the disk looks something like:
myplugin.py
yt-dlp looks for these `yt_dlp_plugins` namespace folders in many locations (see below) and loads in plugins from **all** of them.
+Set the environment variable `YTDLP_NO_PLUGINS` to something nonempty to disable loading plugins entirely.
See the [wiki for some known plugins](https://github.com/yt-dlp/yt-dlp/wiki/Plugins)
diff --git a/devscripts/make_lazy_extractors.py b/devscripts/make_lazy_extractors.py
index d74ea202f..d288d8429 100644
--- a/devscripts/make_lazy_extractors.py
+++ b/devscripts/make_lazy_extractors.py
@@ -2,7 +2,6 @@
# Allow direct execution
import os
-import shutil
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@@ -34,18 +33,14 @@ MODULE_TEMPLATE = read_file('devscripts/lazy_load_template.py')
def main():
- lazy_extractors_filename = get_filename_args(default_outfile='yt_dlp/extractor/lazy_extractors.py')
- if os.path.exists(lazy_extractors_filename):
- os.remove(lazy_extractors_filename)
+ os.environ['YTDLP_NO_PLUGINS'] = 'true'
+ os.environ['YTDLP_NO_LAZY_EXTRACTORS'] = 'true'
- _ALL_CLASSES = get_all_ies() # Must be before import
+ lazy_extractors_filename = get_filename_args(default_outfile='yt_dlp/extractor/lazy_extractors.py')
- import yt_dlp.plugins
+ from yt_dlp.extractor.extractors import _ALL_CLASSES
from yt_dlp.extractor.common import InfoExtractor, SearchInfoExtractor
- # Filter out plugins
- _ALL_CLASSES = [cls for cls in _ALL_CLASSES if not cls.__module__.startswith(f'{yt_dlp.plugins.PACKAGE_NAME}.')]
-
DummyInfoExtractor = type('InfoExtractor', (InfoExtractor,), {'IE_NAME': NO_ATTR})
module_src = '\n'.join((
MODULE_TEMPLATE,
@@ -58,20 +53,6 @@ def main():
write_file(lazy_extractors_filename, f'{module_src}\n')
-def get_all_ies():
- PLUGINS_DIRNAME = 'ytdlp_plugins'
- BLOCKED_DIRNAME = f'{PLUGINS_DIRNAME}_blocked'
- if os.path.exists(PLUGINS_DIRNAME):
- # os.rename cannot be used, e.g. in Docker. See https://github.com/yt-dlp/yt-dlp/pull/4958
- shutil.move(PLUGINS_DIRNAME, BLOCKED_DIRNAME)
- try:
- from yt_dlp.extractor.extractors import _ALL_CLASSES
- finally:
- if os.path.exists(BLOCKED_DIRNAME):
- shutil.move(BLOCKED_DIRNAME, PLUGINS_DIRNAME)
- return _ALL_CLASSES
-
-
def extra_ie_code(ie, base=None):
for var in STATIC_CLASS_PROPERTIES:
val = getattr(ie, var)
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index 9ac6ca0d0..eea106503 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -4070,6 +4070,10 @@ class YoutubeDL:
write_debug(f'Proxy map: {self.proxies}')
write_debug(f'Request Handlers: {", ".join(rh.RH_NAME for rh in self._request_director.handlers.values())}')
+ if os.environ.get('YTDLP_NO_PLUGINS'):
+ write_debug('Plugins are forcibly disabled')
+ return
+
for plugin_type, plugins in {'Extractor': plugin_ies, 'Post-Processor': plugin_pps}.items():
display_list = ['{}{}'.format(
klass.__name__, '' if klass.__name__ == name else f' as {name}')
diff --git a/yt_dlp/plugins.py b/yt_dlp/plugins.py
index 3cc879fd7..d777d14e7 100644
--- a/yt_dlp/plugins.py
+++ b/yt_dlp/plugins.py
@@ -5,6 +5,7 @@ import importlib.machinery
import importlib.util
import inspect
import itertools
+import os
import pkgutil
import sys
import traceback
@@ -137,6 +138,8 @@ def load_module(module, module_name, suffix):
def load_plugins(name, suffix):
classes = {}
+ if os.environ.get('YTDLP_NO_PLUGINS'):
+ return classes
for finder, module_name, _ in iter_modules(name):
if any(x.startswith('_') for x in module_name.split('.')):