{"library":"pydriller","title":"PyDriller","description":"PyDriller is a Python framework designed for mining software repositories. It enables developers to easily extract detailed information from any Git repository, including commits, developers, file modifications, diffs, and source code. The library is actively maintained with frequent minor releases to introduce new features and improvements.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install pydriller"],"cli":null},"imports":["from pydriller import Repository","from pydriller.domain.commit import Commit","from pydriller.domain.commit import ModifiedFile"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from pydriller import Repository\n\nrepo_url = \"https://github.com/ishepard/pydriller.git\" # Or a local path: \"/path/to/your/repo\"\n\n# Iterate over all commits in the repository\nprint(f\"Analyzing repository: {repo_url}\")\nfor commit in Repository(repo_url).traverse_commits():\n    print(f\"  Hash: {commit.hash}\")\n    print(f\"  Author: {commit.author.name} <{commit.author.email}>\")\n    print(f\"  Date: {commit.author_date}\")\n    print(f\"  Message: {commit.msg.splitlines()[0]}\")\n    print(f\"  Files changed: {len(commit.modifications)}\")\n    for modification in commit.modifications:\n        print(f\"    - {modification.change_type.name}: {modification.new_path}\")\n\n# Example with filters (last 5 commits in a specific branch)\nimport datetime\n\n# For testing, we use a specific older commit hash and a small number of commits\n# In a real scenario, you might use 'since=datetime.datetime(2023, 1, 1)'\nprint(\"\\nAnalyzing last 5 commits in 'master' branch:\")\nfor commit in Repository(\n    repo_url,\n    order=\"reverse\", # Get recent commits first\n    num_commits=5, \n    only_in_branches=['master']\n).traverse_commits():\n    print(f\"  Commit: {commit.hash[:7]} - {commit.msg.splitlines()[0]}\")","lang":"python","description":"This quickstart demonstrates how to initialize a `Repository` object, traverse all commits, and access basic commit information. It also shows an example of using filters to analyze a specific number of recent commits within a particular branch.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"2.9","pypi_latest":"2.9","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.9,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pydriller","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":"33.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pydriller","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2.7,"import_time_s":null,"mem_mb":null,"disk_size":"33M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pydriller","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":"36.3M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pydriller","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":"37M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pydriller","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":"27.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pydriller","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2.7,"import_time_s":null,"mem_mb":null,"disk_size":"28M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pydriller","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":"27.7M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pydriller","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":"28M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pydriller","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":"32.8M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pydriller","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":"33M"}]}}