{"id":893,"library":"levenshtein","title":"Levenshtein String Distance","description":"The `levenshtein` Python C extension module provides highly optimized functions for fast computation of Levenshtein (edit) distance, string similarity, and other related metrics. It is currently at version 0.27.3 and maintains an active release cadence with regular updates to support newer Python versions.","status":"active","version":"0.27.3","language":"python","source_language":"en","source_url":"https://github.com/rapidfuzz/Levenshtein.git","tags":["string-matching","levenshtein-distance","nlp","fuzzy-matching","c-extension"],"install":[{"cmd":"pip install levenshtein","lang":"bash","label":"Recommended installation"},{"cmd":"pip install python-Levenshtein","lang":"bash","label":"Legacy package name (installs 'levenshtein' as dependency)"}],"dependencies":[],"imports":[{"note":"The primary functions like `distance`, `ratio`, `editops` are direct attributes of the imported `Levenshtein` module.","wrong":"from Levenshtein import distance","symbol":"Levenshtein","correct":"import Levenshtein"}],"quickstart":{"code":"import Levenshtein\n\nstring1 = \"kitten\"\nstring2 = \"sitting\"\n\n# Calculate Levenshtein distance\ndistance = Levenshtein.distance(string1, string2)\nprint(f\"Levenshtein distance between '{string1}' and '{string2}': {distance}\")\n\n# Calculate Levenshtein ratio (normalized similarity)\nratio = Levenshtein.ratio(string1, string2)\nprint(f\"Levenshtein ratio between '{string1}' and '{string2}': {ratio:.2f}\")\n\n# Get edit operations\nedit_ops = Levenshtein.editops(string1, string2)\nprint(f\"Edit operations: {edit_ops}\")","lang":"python","description":"This quickstart demonstrates how to calculate the Levenshtein distance, the normalized similarity ratio, and retrieve the sequence of edit operations between two strings using the `levenshtein` library."},"warnings":[{"fix":"Update your `requirements.txt` and `pip install` commands to use `levenshtein`. If you were importing as `from Levenshtein import ...`, this import path remains correct for both package names.","message":"The official package name on PyPI was changed from `python-Levenshtein` to `levenshtein`. While `python-Levenshtein` still exists and depends on the `levenshtein` package, using the new name directly is recommended for clarity and to ensure future compatibility.","severity":"breaking","affected_versions":"<=0.12.2 (for direct `python-Levenshtein` usage), all versions (for best practice)"},{"fix":"Ensure your Python environment meets the minimum requirement, which is currently Python 3.10 or later for version 0.27.3.","message":"Support for older Python versions is periodically dropped. For instance, Python 3.8 support was removed in version 0.26.0, and Python 3.9 support was removed in version 0.27.2.","severity":"breaking","affected_versions":"0.26.0+ (for Python 3.8), 0.27.2+ (for Python 3.9)"},{"fix":"Be aware of the underlying calculation for `ratio()`. If a different similarity metric or weighting is required, consider using `Levenshtein.distance()` with custom `weights` parameters (e.g., `weights=(1,1,1)` for equal costs) and calculating your own normalized ratio, or explore other libraries like `rapidfuzz` that offer various ratio algorithms.","message":"The `Levenshtein.ratio()` function calculates a normalized 'Indel similarity' where substitutions are implicitly treated as a deletion followed by an insertion (costing 2 edit operations), rather than a single substitution (costing 1). This can lead to unexpected ratio values if users anticipate a different weighting scheme for substitutions.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T21:00:01.617Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Ensure the package is installed using `pip install levenshtein` and then import it as `import levenshtein` in your Python code. If you specifically need the old `python-Levenshtein` package, install it with `pip install python-Levenshtein` and then `import Levenshtein`.","cause":"The `levenshtein` library, version 0.27.3 and newer, is imported using `import levenshtein` (lowercase 'l'). This error occurs when attempting to import it with `import Levenshtein` (uppercase 'L'), which was the convention for the older `python-Levenshtein` package, or when the `levenshtein` package itself is not installed in the active environment.","error":"ModuleNotFoundError: No module named 'Levenshtein'"},{"fix":"On Windows, install 'Build Tools for Visual Studio' (e.g., Visual Studio 2022 Build Tools) with the 'Desktop development with C++' workload. On Debian/Ubuntu, run `sudo apt-get install build-essential python3-dev`. On Fedora/RHEL, use `sudo dnf install @development-tools python3-devel`. On macOS, install Xcode Command Line Tools with `xcode-select --install`.","cause":"The `levenshtein` package is a C extension and requires a C/C++ compiler and Python development headers to be present on the system for successful compilation during installation.","error":"ERROR: Command errored out with exit status 1: ... error: Microsoft Visual C++ 14.0 or greater is required. (or fatal error: Python.h: No such file or directory)"},{"fix":"Either call the function using the module prefix, like `levenshtein.distance(str1, str2)`, or import the function directly using `from levenshtein import distance`.","cause":"This error occurs when the `distance` function is called without its module prefix, typically after using `import levenshtein` instead of `from levenshtein import distance`.","error":"NameError: name 'distance' is not defined"},{"fix":"Ensure that both arguments passed to `levenshtein.distance()` are valid string (str) objects. If processing a collection of strings, iterate over them and pass individual string elements to the function.","cause":"The `levenshtein.distance()` function was invoked with arguments that are not Python string (str) or Unicode objects, such as lists, Pandas Series, or None values.","error":"TypeError: distance expected two Strings or two Unicodes"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"0.27.3","cli_name":"","cli_version":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","installed_version":"0.27.1","pypi_latest":"0.27.3","is_stale":true,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.4,"disk_size":"37.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.4,"disk_size":"37.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.4,"disk_size":"37.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.4,"disk_size":"37.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"31M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"31M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"31M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"31M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.05,"mem_mb":1.5,"disk_size":"39.6M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":1.5,"disk_size":"39.6M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.05,"mem_mb":1.5,"disk_size":"39.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":1.5,"disk_size":"39.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.4,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"33M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"33M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.3,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"33M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"33M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.04,"mem_mb":1.2,"disk_size":"31.5M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.3,"disk_size":"31.5M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.04,"mem_mb":1.2,"disk_size":"31.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.2,"disk_size":"31.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.04,"mem_mb":1.2,"disk_size":"24M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.2,"disk_size":"24M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.04,"mem_mb":1.3,"disk_size":"24M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.3,"disk_size":"24M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.04,"mem_mb":1.4,"disk_size":"31.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.4,"disk_size":"31.1M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.04,"mem_mb":1.4,"disk_size":"31.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.4,"disk_size":"31.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.2,"import_time_s":0.03,"mem_mb":1.2,"disk_size":"24M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.2,"disk_size":"24M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.03,"mem_mb":1.2,"disk_size":"24M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.2,"disk_size":"24M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"37.5M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"37.5M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"37.6M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"37.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.4,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"30M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"30M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.5,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"30M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"python-Levenshtein","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"30M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}