{"id":381,"library":"werkzeug","title":"Werkzeug","description":"Werkzeug is a comprehensive WSGI web application library, currently at version 3.1.7, released on March 28, 2026. It offers a wide range of utilities for building web applications in Python, with a release cadence of regular updates addressing both features and fixes.","status":"active","version":"3.1.7","language":"python","source_language":"en","source_url":"https://github.com/pallets/werkzeug/","tags":["WSGI","web application","Python","library"],"install":[{"cmd":"pip install werkzeug","lang":"bash","label":"Install Werkzeug"}],"dependencies":[{"reason":"Werkzeug is a core dependency of Flask, providing essential utilities for web development.","package":"flask"}],"imports":[{"note":"Direct import of 'wrap_file' from 'werkzeug.wsgi' is recommended.","symbol":"wrap_file","correct":"from werkzeug.wsgi import wrap_file"},{"note":"Direct import of 'url_quote' from 'werkzeug.urls' is recommended.","symbol":"url_quote","correct":"from werkzeug.urls import url_quote"}],"quickstart":{"code":"from werkzeug.wrappers import Request, Response\nfrom werkzeug.serving import run_simple\n\ndef application(environ, start_response):\n    request = Request(environ)\n    response = Response('Hello, World!', mimetype='text/plain')\n    return response(environ, start_response)\n\nif __name__ == '__main__':\n    run_simple('localhost', 4000, application)","lang":"python","description":"A minimal WSGI application using Werkzeug to respond with 'Hello, World!'"},"warnings":[{"fix":"Update imports to use direct module paths, e.g., 'from werkzeug.urls import url_quote'.","message":"Deprecation of top-level attributes in 'werkzeug' module; direct imports are now required. Failure to update may lead to ImportErrors, AttributeErrors, or application hangs/timeouts.","severity":"breaking","affected_versions":">=0.16.0"},{"fix":"Use absolute imports to ensure correct module resolution.","message":"Relative imports can break import paths; prefer absolute imports to avoid issues.","severity":"gotcha","affected_versions":"All"}],"env_vars":null,"last_verified":"2026-05-12T13:26:06.298Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"from werkzeug.security import generate_password_hash, check_password_hash","cause":"`generate_password_hash` and `check_password_hash` were moved from the top-level `werkzeug` module to `werkzeug.security` in Werkzeug 0.15.","error":"ModuleNotFoundError: No module named 'werkzeug.security'"},{"fix":"Use `request.get_json()` to parse JSON data from the request body. If using Flask's request proxy, `flask.request.json` is available and calls `get_json()` internally.","cause":"The Werkzeug `Request` object (used by Flask) does not expose JSON body data via a direct `.json` attribute; it provides methods to parse it.","error":"AttributeError: 'Request' object has no attribute 'json'"},{"fix":"from functools import cached_property","cause":"`cached_property` was deprecated in `werkzeug.utils` and later removed in Werkzeug 2.1+, in favor of the standard library's `functools.cached_property`.","error":"ImportError: cannot import name 'cached_property' from 'werkzeug.utils'"},{"fix":"Terminate the process currently using the port, or configure your application to run on a different port. On Linux/macOS, `lsof -i :<PORT>` and `kill -9 <PID>` can help.","cause":"Another process is already listening on the specified port (e.g., 5000), preventing the Werkzeug development server from starting.","error":"OSError: [Errno 98] Address already in use"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"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":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.23,"mem_mb":7.3,"disk_size":"19.6M"},{"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.19,"mem_mb":7.3,"disk_size":"20M"},{"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.33,"mem_mb":8.1,"disk_size":"21.7M"},{"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.28,"mem_mb":8.1,"disk_size":"22M"},{"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.33,"mem_mb":7.6,"disk_size":"13.5M"},{"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.29,"mem_mb":7.6,"disk_size":"14M"},{"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.27,"mem_mb":7.9,"disk_size":"13.1M"},{"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.28,"mem_mb":7.9,"disk_size":"14M"},{"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.18,"mem_mb":7.2,"disk_size":"19.0M"},{"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.15,"mem_mb":7.2,"disk_size":"20M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"stale","tag_description":"widespread failures or data too old to trust","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}]}}