Install & Compatibility
Where this runs
tested against v4.0.16 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.920 runs
build_error
glibcpy 3.10–3.920 runs
installs and imports cleanly · install 21.0s · import 1.475s · 747MB
751MB installed
● package 751MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
Linker
✓ from splink import Linker
SettingsCreator
✓ from splink import SettingsCreator
block_on
✓ from splink import block_on
DuckDBAPI
✓ from splink import DuckDBAPI
splink_datasets
✓ from splink import splink_datasets
cl
✓ import splink.comparison_library as cl
This quickstart demonstrates how to set up a basic Splink deduplication model using DuckDB. It covers defining comparison libraries and blocking rules, estimating parameters for record linkage, and preparing for prediction. It uses a built-in `fake_1000` dataset for convenience.
import splink.comparison_library as cl
from splink import DuckDBAPI, Linker, SettingsCreator, block_on, splink_datasets
db_api = DuckDBAPI()
df = splink_datasets.fake_1000
settings = SettingsCreator(
link_type="dedupe_only",
comparisons=[
cl.NameComparison("first_name"),
cl.JaroAtThresholds("surname"),
cl.DateOfBirthComparison("dob", input_is_string=True),
cl.ExactMatch("city").configure(term_frequency_adjustments=True),
cl.EmailComparison("email"),
],
blocking_rules_to_generate_predictions=[
block_on("first_name", "dob"),
block_on("surname"),
]
)
linker = Linker(df, settings, db_api)
linker.training.estimate_probability_two_random_records_match(
[block_on("first_name", "surname")], recall=0.7
)
linker.training.estimate_u_using_random_sampling(max_pairs=1e6)
linker.training.estimate_parameters_using_expectation_maximisation(
block_on("first_name", "surname")
)
# To get the results, e.g., predictions_df = linker.inference.predict()
Debug
Known issues
breakingSplink v5.0 introduces significant breaking changes. Key updates include the removal of the implicit cache mechanism in favor of explicit cache table management functions, removal of 'salting', introduction of 'chunking' for large datasets, and a shift from Bayes Factors to Match Weights (log-odds) for internal probabilistic calculations to improve numerical stability. Additionally, support for the Athena backend is being dropped.fixReview v5.0 documentation and migration guides for updated API calls, cache management, and probabilistic calculation handling. Users relying on Athena should plan for migration to another backend or use Splink v4.x.
affects: >=5.0.0
breakingPython 3.8 support was dropped in Splink v4.0.12. Older versions of Python are being phased out in alignment with community end-of-life policies.fixEnsure your environment uses Python 3.9 or higher. The current requirement is `>=3.9.0, <4.0.0`.
affects: <4.0.12 (Python 3.8)
gotchaSplink performs best with input data containing multiple, non-highly correlated columns. It is not designed for linking single-column 'bag of words' data (e.g., only a company name). High correlation (e.g., city and postcode) can also reduce effectiveness.fixPre-process data to ensure multiple, diverse columns are used for linkage. Avoid relying on highly correlated features or single 'bag of words' columns for optimal accuracy.
affects: All
deprecatedSQLite backend support is minimal and receives less attention from the development team compared to DuckDB and Spark. It has reasonable but not complete coverage of comparison functions, particularly for array and date comparisons.fixFor optimal performance and feature coverage, especially with larger datasets or complex comparisons, consider using DuckDB (default) or other actively supported backends like Spark or PostgreSQL.
affects: All
Errors
Common errors & fixes
ModuleNotFoundError: No module named 'splink'
The 'splink' package is not installed in the current Python environment or virtual environment.
fixInstall Splink using pip, specifying your desired SQL backend (e.g., '[duckdb]', '[spark]').
AttributeError: 'Linker' object has no attribute 'predict'
In Splink v4.0+, the `predict` method was replaced or renamed with more granular methods like `get_pairwise_matches()` or `get_ranked_probas()` for improved functionality.
fixUse `linker.get_pairwise_matches()` to generate all potential matches with their probabilities, or `linker.get_ranked_probas()` for a ranked list of record pairs. Example: `matches = linker.get_pairwise_matches()`
AttributeError: module 'splink' has no attribute 'analyse'
The `splink.analyse` module was removed in Splink v4.0. Its functions were integrated directly into the `Linker` object or replaced by new methods.
fixUpdate your code to use the new API. For example, replace `splink.analyse.estimate_u_values('col')` with `linker.estimate_u_values('col')` or `splink.analyse.estimate_probability_two_random_records_match` with `linker.compute_blocking_rule_performance()`. duckdb.DuckDBError: Table with name '...' does not exist!
Splink's underlying SQL engine (e.g., DuckDB) cannot find the specified table. This often happens if the data frame or table was not correctly registered with the `Linker` object or if there's a typo in the table name.
fixEnsure your data is registered with the `Linker` using `linker.register_table(your_dataframe, 'your_table_name')` and that the table name in your settings dictionary or queries exactly matches the registered name.
Upgrade
Version history
4.0.16latest on PyPI · released Mar 11, 2026
Audit
Dependencies
duckdbrequiredDefault high-performance SQL backend, bundled with base install.
sqlite3requiredBundled SQL backend, suited for smaller datasets.
pysparkrequiredOptional backend for big data processing (installed with 'splink[spark]').
pyathenarequiredOptional backend for AWS Athena (installed with 'splink[athena]'). Note: support is being dropped in v5.
psycopg2-binaryrequiredOptional backend for PostgreSQL (installed with 'splink[postgres]').
sqlglotrequiredUsed for SQL transpilation to ensure compatibility across multiple SQL engines.