# How abx-dl Handles Plugins with Missing Binaries When Using --no-install

> Learn how abx-dl with --no-install handles plugins missing binaries. It skips them and logs a warning instead of auto-installing, ensuring a smoother process.

- Repository: [ArchiveBox/abx-dl](https://github.com/archivebox/abx-dl)
- Tags: how-to-guide
- Published: 2026-02-25

---

**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`](https://github.com/archivebox/abx-dl/blob/main/abx_dl/cli.py) and directly controls whether the downloader attempts to satisfy missing dependencies.

```python
@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)](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`](https://github.com/archivebox/abx-dl/blob/main/abx_dl/executor.py), the `download()` function delegates dependency validation to `check_plugin_dependencies()`, passing along the `auto_install` parameter.

```python
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)](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-install` was used): Missing binaries are collected into the `missing` list 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.

```python
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)](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:

1. **No plugin hooks execute** for that plugin.
2. **No download attempts** are made using missing binaries.
3. **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.

```python
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)](https://github.com/archivebox/abx-dl/blob/main/abx_dl/executor.py#L26-L31)

This feedback loop ensures users understand that:
- The `--no-install` flag 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-install` sets `auto_install=False`** in [`abx_dl/cli.py`](https://github.com/archivebox/abx-dl/blob/main/abx_dl/cli.py), passing this configuration through to the download executor.
- **`check_plugin_dependencies()` detects missing binaries** but does not install them when `auto_install` is disabled.
- **Plugins with missing binaries are added to `skipped_plugins`** and excluded from `available_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`](https://github.com/archivebox/abx-dl/blob/main/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`](https://github.com/archivebox/abx-dl/blob/main/abx_dl/dependencies.py)), which verify whether each required binary is executable and accessible in the current environment.