{"library":"python-tools-scripts","title":"Python Tools Scripts","description":"Python Tools Scripts (ptscripts) is a command-line interface (CLI) tool designed to simplify the creation and management of project-specific scripts. It functions similarly to `invoke` but leverages `argparse` internally for CLI argument definition. The library discovers and integrates scripts placed within a designated 'tools' package in a repository's root, making them accessible via a central `tools` command. It is currently at version 0.20.5 and appears to have an active maintenance cadence, with the latest release in early 2024.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install python-tools-scripts"],"cli":{"name":"tools","version":"0.20.5"}},"imports":["from ptscripts import Context","from ptscripts import command_group","from ptscripts import command"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom ptscripts import command_group, Context, command\n\n# --- File: <repo-root>/tools/__init__.py ---\n# This file makes the 'tools' directory a Python package.\n# No specific content is required here for basic discovery, but it can import other scripts.\n\n# --- File: <repo-root>/tools/my_scripts.py ---\n# Define a command group\nmy_group = command_group(name=\"hello\", help=\"Basic greeting commands\")\n\n@my_group.command(\n    arguments={\n        \"name\": {\"help\": \"The name to greet\", \"default\": \"World\"}\n    }\n)\ndef greet(ctx: Context, name: str):\n    \"\"\"Greets the specified name.\"\"\"\n    print(f\"Hello, {name} from {ctx.command_path}!\")\n\n@my_group.command()\ndef goodbye(ctx: Context):\n    \"\"\"Says goodbye.\"\"\"\n    print(f\"Goodbye from {ctx.command_path}!\")\n\n# To make 'my_scripts.py' discoverable by the 'tools' CLI,\n# ensure it's imported in '<repo-root>/tools/__init__.py'.\n# E.g., 'from . import my_scripts'\n\n# --- How to run (from your repository root) ---\n# Make sure to run 'pip install python-tools-scripts' first.\n# > tools hello greet --name Alice\n# > tools hello goodbye\n","lang":"python","description":"To use `python-tools-scripts`, create a `tools` directory in your repository's root and ensure it's a Python package (contains `__init__.py`). Define your CLI commands within Python files inside this `tools` package using `@command_group` and `@command` decorators from `ptscripts`. These scripts will then be discoverable and executable via the `tools` command-line utility. Ensure you import your script files into `tools/__init__.py` for them to be picked up.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.20.5","pypi_latest":"0.20.5","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":5,"avg_import_s":1.16,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.98,"mem_mb":19.1,"disk_size":"44.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.6,"import_time_s":0.74,"mem_mb":19.1,"disk_size":"44M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.39,"mem_mb":21.6,"disk_size":"48.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.7,"import_time_s":1.24,"mem_mb":21.6,"disk_size":"48M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.44,"mem_mb":20.8,"disk_size":"40.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":1.43,"mem_mb":20.8,"disk_size":"40M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.36,"mem_mb":21.8,"disk_size":"39.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.3,"import_time_s":1.31,"mem_mb":21.8,"disk_size":"39M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.88,"mem_mb":18.6,"disk_size":"43.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"python-tools-scripts","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.2,"import_time_s":0.81,"mem_mb":18.6,"disk_size":"43M"}]}}