{"library":"safety","title":"Safety CLI","description":"Safety CLI (safety) is a Python dependency vulnerability scanner that identifies known security vulnerabilities and malicious packages in your project's dependencies. It integrates into local development, CI/CD pipelines, and production systems, providing actionable remediation recommendations. The current version is 3.7.0, and it maintains an active release cadence with regular updates.","language":"python","status":"active","last_verified":"Thu Apr 09","install":{"commands":["pip install safety"],"cli":{"name":"safety","version":"/usr/local/lib/python3.11/site-packages/safety/auth/main.py:6: AuthlibDeprecationWarning: authlib.jose module is deprecated, please use joserfc instead."}},"imports":[],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import subprocess\nimport os\n\n# Create a dummy requirements.txt for demonstration\nwith open('requirements.txt', 'w') as f:\n    f.write('requests==2.25.1 # known vulnerable version for demo (CVE-2023-32681, fixed in 2.31.0)\n')\n    f.write('Flask==2.3.2 # non-vulnerable example\n')\n\nprint('Scanning requirements.txt for vulnerabilities...')\n\n# Run safety scan command. Note: For full, commercial vulnerability database access,\n# an API key might be required. Basic scanning may work without explicit auth or prompt for it.\n# Use os.environ.get('SAFETY_API_KEY', '') if using a commercial key programmatically.\ntry:\n    # Using check=False to capture output even if safety exits with a non-zero code (vulnerabilities found)\n    result = subprocess.run(\n        ['safety', 'scan', '-r', 'requirements.txt', '--full-report'],\n        capture_output=True,\n        text=True,\n        check=False\n    )\n    print('--- Safety Scan Output ---')\n    print(result.stdout)\n    if result.stderr:\n        print('--- Safety Scan Errors ---')\n        print(result.stderr)\n    print(f'Safety exited with code: {result.returncode}')\n\nexcept FileNotFoundError:\n    print(\"Error: 'safety' command not found. Ensure Safety CLI is installed and in your PATH.\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")\nfinally:\n    # Clean up the dummy file\n    if os.path.exists('requirements.txt'):\n        os.remove('requirements.txt')\n","lang":"python","description":"This quickstart demonstrates how to programmatically run `safety scan` using Python's `subprocess` module to check a `requirements.txt` file. It includes a dummy vulnerable dependency (requests==2.25.1) to show output with findings. For comprehensive vulnerability data, an API key might be required, which can be passed via `SAFETY_API_KEY` environment variable or configured using `safety auth`.","tag":null,"tag_description":null,"last_tested":"2026-04-25","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}]},"compatibility":null}