{"id":998,"library":"murmurhash","title":"MurmurHash","description":"MurmurHash is a fast, non-cryptographic hash function library, primarily used for tasks like hash table indexing, data deduplication, and probabilistic data structures. This Python library provides efficient Cython bindings for MurmurHash, offering various 32-bit and 128-bit hash variants. It is actively maintained with frequent updates to support new Python versions and architectures.","status":"active","version":"1.0.15","language":"python","source_language":"en","source_url":"https://github.com/explosion/murmurhash","tags":["hashing","non-cryptographic","cython","performance"],"install":[{"cmd":"pip install murmurhash","lang":"bash","label":"Install stable version"}],"dependencies":[],"imports":[{"note":"This library (explosion/murmurhash) is distinct from the popular `mmh3` package, which has a different import path and API. Ensure you are using the correct library for your needs.","wrong":"import mmh3","symbol":"hash","correct":"import murmurhash.mrmr\nmurmurhash.mrmr.hash('data')"},{"note":"Provides a 64-bit MurmurHash output.","symbol":"hash64","correct":"import murmurhash.mrmr\nmurmurhash.mrmr.hash64('data')"},{"note":"Provides a 128-bit MurmurHash output as a tuple of two integers.","symbol":"hash128","correct":"import murmurhash.mrmr\nmurmurhash.mrmr.hash128('data')"}],"quickstart":{"code":"import murmurhash.mrmr\n\n# Hash a string (UTF-8 encoded by default)\ntext_hash = murmurhash.mrmr.hash('hello world', seed=42)\nprint(f\"32-bit hash for 'hello world': {text_hash}\")\n\n# Hash bytes\nbytes_hash = murmurhash.mrmr.hash(b'hello world', seed=42)\nprint(f\"32-bit hash for b'hello world': {bytes_hash}\")\n\n# Get a 64-bit hash\nhash_64 = murmurhash.mrmr.hash64('another example', seed=0)\nprint(f\"64-bit hash: {hash_64}\")\n\n# Get a 128-bit hash (returns a tuple of two integers)\nhash_128 = murmurhash.mrmr.hash128('long string data', seed=12345)\nprint(f\"128-bit hash: {hash_128}\")\n\n# Example with environment variable for seed (not typical for hash, but for auth template)\n# import os\n# seed_from_env = int(os.environ.get('MURMURHASH_SEED', '0'))\n# env_hash = murmurhash.mrmr.hash('secure_data', seed=seed_from_env)\n# print(f\"Hash with env seed: {env_hash}\")","lang":"python","description":"Demonstrates basic usage of `murmurhash.mrmr.hash`, `hash64`, and `hash128` functions with string and bytes input, and explicit seed values. Strings are UTF-8 encoded by default."},"warnings":[{"fix":"Ensure you `pip install murmurhash` and `import murmurhash.mrmr` for this library, or `pip install mmh3` and `import mmh3` if you intend to use the `mmh3` library. Always refer to the specific library's documentation for correct API usage.","message":"Be aware that `murmurhash` (from `explosion`) is a distinct package from the widely used `mmh3` library for MurmurHash3. They have different import paths (`import murmurhash.mrmr` vs `import mmh3`) and potentially different API behaviors. Installing one and attempting to use the other's API will lead to `ImportError` or unexpected hash results.","severity":"breaking","affected_versions":"All versions"},{"fix":"If comparing hash values with systems using older versions or different MurmurHash implementations, verify their endian-neutrality. For strict compatibility with older, endian-sensitive MurmurHash outputs, manual endian handling might be necessary, or consider pinning to an older `murmurhash` version if acceptable.","message":"Starting from version 1.0.7, MurmurHash2 and MurmurHash3 implementations within this library were made endian-neutral. While this ensures consistent hash values across diverse system architectures (e.g., big-endian vs. little-endian), it may produce different hash outputs compared to older `murmurhash` versions or other MurmurHash implementations that are endian-sensitive.","severity":"gotcha","affected_versions":"1.0.7 and later"},{"fix":"For security-sensitive applications, use cryptographic hash functions from Python's `hashlib` module (e.g., `hashlib.sha256`). For consistent non-cryptographic hashing, explicitly pass the `seed` argument to `murmurhash.mrmr.hash()` (or `murmurhash.mrmr.hash_bytes()` for byte strings). Note that `murmurhash.mrmr` primarily provides 32-bit MurmurHash3. If 64-bit or 128-bit MurmurHash implementations are required, consider using alternative libraries such as `mmh3` or `pyfarmhash` which explicitly offer these functionalities, or ensure all parts of your system use the same default seed.","message":"MurmurHash is a non-cryptographic hash function optimized for speed and good distribution, not for security. It should not be used for cryptographic purposes such as password hashing, digital signatures, or data integrity where collision resistance and unpredictability are critical. Always use a consistent `seed` value to ensure reproducible hash outputs, especially when relying on hashes for data partitioning, caching, or lookups across different systems or application runs.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T22:28:14.419Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Ensure you have the necessary C/C++ compilers installed on your system. On Debian/Ubuntu: `sudo apt-get update && sudo apt-get install build-essential python3-dev`. On Windows, install 'Desktop development with C++' from Visual Studio Installer. For Alpine Linux, install `python3-dev` and `gcc`: `apk add python3-dev gcc`.","cause":"This error typically occurs during installation when the Cython extensions for `murmurhash` cannot be compiled, often due to missing build tools (like `gcc` on Linux or C++ build tools on Windows) or an incompatible environment (e.g., specific Linux distributions like Alpine).","error":"ERROR: Command errored out with exit status 1: ... Running setup.py install for murmurhash: finished with status 'error'"},{"fix":"Upgrade `murmurhash` to its latest version: `pip install --upgrade murmurhash`. If issues persist, consider reinstalling in a fresh virtual environment: `python -m venv .venv && source .venv/bin/activate && pip install murmurhash`.","cause":"This error indicates that the `hash_unicode` function, or similar specific hashing functions, are not directly available or have been renamed in the version of `murmurhash` you have installed, often due to an outdated or conflicting installation, especially when `murmurhash` is a dependency of another library like spaCy.","error":"ImportError: cannot import name 'hash_unicode' from 'murmurhash'"},{"fix":"The `murmurhash` library provides specific hashing functions like `murmurhash.murmur3_32()`, `murmurhash.murmur3_128()`, etc. Refer to the library's documentation or use `dir(murmurhash)` to find the correct function names. For example, use `murmurhash.murmur3_32('your string'.encode('utf-8'))`.","cause":"This error occurs when you try to call a method named `hash` directly on the `murmurhash` module, but such a top-level function does not exist, or its name has changed in the installed version.","error":"AttributeError: module 'murmurhash' has no attribute 'hash'"},{"fix":"Encode your input string to bytes before passing it to the hash function. For integers, convert them to their byte representation. Example: `murmurhash.murmur3_32('your string'.encode('utf-8'))` or `murmurhash.murmur3_32(b'your bytes')`.","cause":"The `murmurhash` functions expect binary data (bytes) as input, but you are providing an integer or a string that has not been explicitly encoded into bytes.","error":"TypeError: a bytes-like object is required, not 'int'"}],"ecosystem":"pypi","meta_description":null,"install_score":80,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"1.0.15","cli_name":"","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"18.1M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"18.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.01,"mem_mb":0.1,"disk_size":"19M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0,"disk_size":"20.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0,"disk_size":"20.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.7,"import_time_s":0,"mem_mb":0,"disk_size":"21M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"11.9M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"11.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.4,"import_time_s":0,"mem_mb":0.1,"disk_size":"12M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.2,"disk_size":"11.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.2,"disk_size":"11.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0,"mem_mb":0.1,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"17.6M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"17.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.8,"import_time_s":0.01,"mem_mb":0.1,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}