{"library":"optimizely-sdk","title":"Optimizely Python SDK","description":"The Optimizely Python SDK enables developers to integrate Optimizely Feature Experimentation, Optimizely Full Stack (legacy), and Optimizely Rollouts into their Python applications. It allows for server-side A/B testing, feature flagging, and personalization. The library is actively maintained with regular releases, currently at version 5.4.0.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install optimizely-sdk"],"cli":null},"imports":["from optimizely import Optimizely"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom optimizely import Optimizely\n\n# The Optimizely datafile is a JSON string describing your experiments and features.\n# In a real application, you would typically fetch this from Optimizely's CDN\n# or use a dedicated datafile manager. For this example, we'll use an environment\n# variable or a minimal placeholder.\n# Replace 'YOUR_OPTIMIZELY_DATAFILE_JSON_HERE' with your actual datafile content.\n# A minimal valid datafile for testing might look like:\n# '{\"version\": \"4\", \"revision\": \"1\", \"projectId\": \"123\", \"experiments\": [], \"featureFlags\": []}'\ndatafile_json = os.environ.get(\n    'OPTIMIZELY_DATAFILE',\n    '{\"version\": \"4\", \"revision\": \"1\", \"projectId\": \"123\", \"experiments\": [], \"featureFlags\": []}'\n)\n\n# Initialize the Optimizely client\n# Consider using an event dispatcher and logger for production environments.\noptimizely_client = Optimizely(datafile_json=datafile_json)\n\n# Example: Check if a feature flag is enabled for a user\nuser_id = \"user_xyz\"\nuser_attributes = {\"browser_type\": \"chrome\", \"plan_type\": \"premium\"}\nfeature_key = \"example_feature\"\n\nif optimizely_client.is_feature_enabled(feature_key, user_id, user_attributes):\n    print(f\"Feature '{feature_key}' is ENABLED for user '{user_id}'.\")\nelse:\n    print(f\"Feature '{feature_key}' is DISABLED for user '{user_id}'.\")\n\n# Example: Decide on a flag and get its variables\nflag_key = \"new_ui_variant\"\ndecision = optimizely_client.decide(flag_key, user_id, user_attributes)\n\nprint(f\"\\nDecision for flag '{flag_key}':\")\nprint(f\"  Variation Key: {decision.variation_key}\")\nprint(f\"  Enabled: {decision.enabled}\")\nprint(f\"  Variables: {decision.variables}\")\nprint(f\"  Reasons: {decision.reasons}\")\n\n# Example: Track a conversion event\nevent_key = \"purchase_complete\"\nevent_tags = {\"revenue\": 49.99, \"currency\": \"USD\"}\noptimizely_client.track(event_key, user_id, user_attributes, event_tags)\nprint(f\"\\nTracked event '{event_key}' for user '{user_id}'.\")\n\n# It's important to close the client to ensure background threads are terminated cleanly.\noptimizely_client.close()\nprint(\"\\nOptimizely client closed.\")\n","lang":"python","description":"This quickstart demonstrates how to initialize the Optimizely client, check the status of a feature flag, make a decision on an experiment flag, and track a conversion event. It's crucial to provide a valid `datafile_json` and manage the client's lifecycle, including calling `close()` when it's no longer needed.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"5.5.0","pypi_latest":"5.5.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.2,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"26.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.4,"import_time_s":null,"mem_mb":null,"disk_size":"27M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"29.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.2,"import_time_s":null,"mem_mb":null,"disk_size":"30M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"21.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2.6,"import_time_s":null,"mem_mb":null,"disk_size":"21M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"20.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2.8,"import_time_s":null,"mem_mb":null,"disk_size":"21M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"25.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"optimizely-sdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.8,"import_time_s":null,"mem_mb":null,"disk_size":"26M"}]}}