How abx-dl Handles Plugins with Missing Binaries When Using --no-install
When you pass the --no-install flag to abx-dl, the tool skips any plugin whose required binaries are not present on the system instead of attempting to auto-install them, and logs a warning to stderr.
The archivebox/abx-dl repository provides a flexible download utility that relies on plugins to handle various content types. Understanding how abx-dl handles plugins with missing binaries when using --no-install is critical for running the tool in restricted environments or when you want strict control over system dependencies.
CLI Flag Parsing and Configuration
The --no-install flag is defined in abx_dl/cli.py and directly controls whether the downloader attempts to satisfy missing dependencies.
@click.option('--no-install', 'no_install', is_flag=True,
help='Skip plugins with missing dependencies instead of auto-installing')
…
gen = download(url, plugins, out_path, selected,
config_overrides or None, auto_install=not no_install)
Source: [abx_dl/cli.py](https://github.com/archivebox/abx-dl/blob/main/abx_dl/cli.py#L66-L71)
When the flag is present, auto_install is set to False and passed into the download() function.
Dependency Checking Logic
Inside abx_dl/executor.py, the download() function delegates dependency validation to check_plugin_dependencies(), passing along the auto_install parameter.
deps_ok, missing = check_plugin_dependencies(plugin, auto_install=auto_install)
Source: [abx_dl/executor.py](https://github.com/archivebox/abx-dl/blob/main/abx_dl/executor.py#L89-L96)
This function checks whether all required binaries for the plugin are available on the system. The behavior diverges based on the auto_install value:
- When
auto_install=True: Missing binaries trigger an installation attempt. - When
auto_install=False(i.e.,--no-installwas used): Missing binaries are collected into themissinglist but not installed.
How abx-dl Skips Plugins with Missing Binaries
When check_plugin_dependencies() returns deps_ok=False, the download() function filters the plugin out of the execution queue.
if deps_ok:
available_plugins[name] = plugin
else:
skipped_plugins.append((name, missing))
Source: [abx_dl/executor.py](https://github.com/archivebox/abx-dl/blob/main/abx_dl/executor.py#L15-L22)
By placing the plugin in skipped_plugins rather than available_plugins, abx-dl ensures that:
- No plugin hooks execute for that plugin.
- No download attempts are made using missing binaries.
- The final results table marks the plugin as "skipped" rather than "failed" or "succeeded".
User Feedback and Warning Messages
When running in a TTY and plugins are skipped due to missing binaries, abx-dl prints explicit warnings to stderr to inform the user why certain functionality is unavailable.
print(f"Warning: Skipping plugin '{plugin_name}' - missing dependencies: {', '.join(missing)}", file=sys.stderr)
print("Hint: Run without --no-install to auto-install dependencies, or run 'abx-dl plugins --install'", file=sys.stderr)
Source: [abx_dl/executor.py](https://github.com/archivebox/abx-dl/blob/main/abx_dl/executor.py#L26-L31)
This feedback loop ensures users understand that:
- The
--no-installflag caused the skip. - They can remove the flag to allow auto-installation.
- Alternatively, they can manually install dependencies using
abx-dl plugins --install.
Summary
--no-installsetsauto_install=Falseinabx_dl/cli.py, passing this configuration through to the download executor.check_plugin_dependencies()detects missing binaries but does not install them whenauto_installis disabled.- Plugins with missing binaries are added to
skipped_pluginsand excluded fromavailable_plugins, preventing their execution. - Warning messages guide users to either remove the flag or manually install dependencies via the plugin management command.
Frequently Asked Questions
What happens if I use --no-install but all binaries are already present?
If all required binaries for a plugin are present on the system, the plugin executes normally. The --no-install flag only affects behavior when dependencies are missing; it does not disable plugins that are already satisfied.
Can I install missing binaries later without re-running the download command?
Yes. You can manually install missing dependencies using the plugin management command: abx-dl plugins --install. This installs all required binaries for enabled plugins, allowing subsequent download commands to use those plugins even with --no-install enabled.
Does --no-install affect performance or download speed?
No, --no-install does not directly affect download performance. It only changes the dependency resolution behavior at startup. In fact, it may slightly reduce startup time by skipping installation attempts, though the primary purpose is to enforce strict control over system dependencies rather than optimize speed.
Where does abx-dl look for binaries when checking dependencies?
The check_plugin_dependencies() function in abx_dl/executor.py checks the system PATH for required binaries. The specific lookup logic is implemented in the dependency checking utilities (likely in abx_dl/dependencies.py), which verify whether each required binary is executable and accessible in the current environment.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →