{"library":"pact-python","title":"pact-python","description":"pact-python is an active library (current version 3.2.1) providing consumer-driven contract testing capabilities for Python applications. It builds on the Pact Rust FFI library, offering full support for Pact features and ensuring compatibility with other Pact implementations. It sees regular updates, often aligning with major Pact specification changes and core library enhancements.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install pact-python"],"cli":{"name":"pact","version":"sh: 1: pact: not found"}},"imports":["from pact import Pact","from pact import Consumer, Provider","from pact.verifier import Verifier"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import atexit\nimport unittest\nimport requests\nimport os\nfrom pact import Pact\n\n# Define the client that will interact with the provider\nclass UserClient:\n    def __init__(self, base_url):\n        self.base_url = base_url\n\n    def get_user(self, username):\n        response = requests.get(f\"{self.base_url}/users/{username}\")\n        response.raise_for_status()\n        return response.json()\n\n# Set up Pact for consumer testing\n# Use environment variables for consumer/provider names in CI/CD, or hardcode for local dev\nPACT_MOCK_HOST = os.environ.get('PACT_MOCK_HOST', 'localhost')\nPACT_MOCK_PORT = int(os.environ.get('PACT_MOCK_PORT', '1234'))\n\n# Instantiate Pact with consumer and provider names\npact = Pact(\n    consumer=os.environ.get('PACT_CONSUMER', 'MyConsumer'),\n    provider=os.environ.get('PACT_PROVIDER', 'UserService')\n)\n\n# Start the mock service and register its shutdown\npact.start_service(host_name=PACT_MOCK_HOST, port=PACT_MOCK_PORT)\natexit.register(pact.stop_service)\n\nclass GetUserInfoContract(unittest.TestCase):\n    def test_get_ash_user(self):\n        expected_body = {\n            'username': 'Ash',\n            'id': 123,\n            'groups': ['Admin']\n        }\n\n        # Define the interaction\n        (pact\n         .given('User Ash exists and is an administrator')\n         .upon_receiving('a request for Ash')\n         .with_request('GET', '/users/Ash')\n         .will_respond_with(200, headers={'Content-Type': 'application/json'}, body=expected_body))\n\n        # Run the consumer code against the mock service\n        with pact:\n            client = UserClient(pact.uri)\n            result = client.get_user('Ash')\n            self.assertEqual(result, expected_body)\n\nif __name__ == '__main__':\n    unittest.main()","lang":"python","description":"This quickstart demonstrates a basic consumer-side contract test using `pact-python`. It sets up a mock service, defines an expected interaction, and then verifies that a simple Python client correctly interacts with the mock service based on the defined contract. The mock service URL and consumer/provider names are configurable via environment variables for CI/CD compatibility.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"2.3.3","pypi_latest":"3.4.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":5.1,"avg_import_s":0.67,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.34,"mem_mb":9.7,"disk_size":"75.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.7,"import_time_s":0.26,"mem_mb":9.7,"disk_size":"40M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.42,"mem_mb":11,"disk_size":"77.4M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":0.36,"mem_mb":11,"disk_size":"43M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.6,"mem_mb":14.1,"disk_size":"69.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.59,"mem_mb":14.1,"disk_size":"35M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.3,"mem_mb":9.9,"disk_size":"68.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.7,"import_time_s":0.28,"mem_mb":9.9,"disk_size":"34M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.89,"mem_mb":25.3,"disk_size":"94.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pact-python","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":13.8,"import_time_s":1.7,"mem_mb":25.2,"disk_size":"144M"}]}}