{"library":"single-source","title":"Python Single-Source Versioning Library","description":"The `single-source` library provides a unified way to access a Python project's version directly from code, aligning with PEP 621-style projects. It aims to establish a single source of truth for version information, preventing inconsistencies that arise from manual updates across multiple files. The library supports Python 3.8 and newer versions and is actively maintained.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install single-source"],"cli":null},"imports":["from single_source import get_version","from single_source import VersionNotFoundError"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from pathlib import Path\nfrom single_source import get_version, VersionNotFoundError\n\n# For demonstration, assume a pyproject.toml exists in the parent directory.\n# In a real project, this path would point to your project root.\ntry:\n    # Adjust path_to_pyproject_dir to point to your project's root.\n    # For an executable script, .parent.parent might work if pyproject.toml is two levels up.\n    # For a library in a package, it might be Path(__file__).parent.parent.parent\n    project_root = Path(__file__).resolve().parent\n    # In a typical project, if your script is in `src/my_package/my_module.py` and pyproject.toml is at project root:\n    # project_root = Path(__file__).resolve().parents[3] # Adjust as needed\n    \n    # Example of a simplified path for a quick demonstration setup:\n    # Create a dummy pyproject.toml for this example to be runnable\n    dummy_project_dir = Path('./dummy_project_for_single_source_test')\n    dummy_project_dir.mkdir(exist_ok=True)\n    pyproject_content = '[project]\\nname = \"my_test_package\"\\nversion = \"1.2.3\"\\n'\n    (dummy_project_dir / 'pyproject.toml').write_text(pyproject_content)\n\n    # Now get the version from the dummy project\n    version = get_version(dummy_project_dir)\n    print(f\"Project version (from dummy_project): {version}\")\n\n    # Example with explicit error raising\n    # Clean up dummy project\n    (dummy_project_dir / 'pyproject.toml').unlink()\n    dummy_project_dir.rmdir()\n\n    # Attempt to get version from a non-existent path to demonstrate VersionNotFoundError\n    non_existent_path = Path('./non_existent_project')\n    print(f\"\\nAttempting to get version from non-existent path '{non_existent_path}' with error raising...\")\n    try:\n        get_version(non_existent_path, raise_exc=True)\n    except VersionNotFoundError as e:\n        print(f\"Caught expected error: {e}\")\n\nexcept Exception as e:\n    print(f\"An error occurred: {e}\")\nfinally:\n    # Ensure cleanup even if errors occur before the explicit unlink/rmdir\n    dummy_project_dir = Path('./dummy_project_for_single_source_test')\n    if dummy_project_dir.exists():\n        if (dummy_project_dir / 'pyproject.toml').exists():\n            (dummy_project_dir / 'pyproject.toml').unlink()\n        if dummy_project_dir.is_dir():\n            dummy_project_dir.rmdir()","lang":"python","description":"This quickstart demonstrates how to retrieve the project version using `get_version`. It shows how to pass the path to your project's root directory (where `pyproject.toml` resides) and how to handle the `VersionNotFoundError` if the version cannot be found when `raise_exc=True` is specified. For a runnable example, a dummy `pyproject.toml` is created and cleaned up.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.4.0","pypi_latest":"0.4.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.6,"avg_import_s":0.11,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":3.7,"disk_size":"17.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.07,"mem_mb":3.7,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.13,"mem_mb":4.2,"disk_size":"19.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.11,"mem_mb":4.2,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.14,"mem_mb":4.8,"disk_size":"11.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.14,"mem_mb":4.8,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":4.8,"disk_size":"11.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.4,"import_time_s":0.12,"mem_mb":4.8,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.08,"mem_mb":3.5,"disk_size":"17.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"single-source","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.07,"mem_mb":3.5,"disk_size":"18M"}]}}