Skip to main content

One command to explain your Python environment, trace imports, and detect shadows.

Project description

pywho
One command to explain your Python environment, trace imports, and detect shadows.

CI PyPI version Python versions License Downloads Coverage Documentation


Ever asked "Which Python am I running? Why did import X load that file? Do I have any files shadowing real modules?"pywho answers all of it instantly.

📖 Read the full documentation

Quick Reference

Command Description
pywho Show a full report of your Python environment
pywho --json Output environment report as JSON
pywho --packages Include all installed packages in the report
pywho --no-pip Skip pip version detection (faster)
pywho trace <module> Trace where an import resolves and show search order
pywho trace <module> --verbose Trace with full sys.path search log
pywho trace <module> --json Trace output as JSON
pywho scan . Scan project for files that shadow stdlib/installed packages
pywho scan . --no-installed Scan against stdlib only (skip installed packages)
pywho scan . --json Scan output as JSON
python -m pywho Run as a Python module

Table of Contents

Getting Started

pip install pywho

Or with uv:

uv pip install pywho

Note: uvx pywho is not recommended — it runs inside uv's ephemeral sandbox, so the output reflects that temporary environment instead of your actual project. Always install pywho into the environment you want to inspect.

Why pywho?

  • "Works on my machine" is the #1 debugging friction in Python. pywho kills it with one command.
  • Paste the output into a GitHub issue, Slack message, or Stack Overflow question. Done.
  • Zero dependencies. Pure stdlib. Works everywhere Python runs.
  • Cross-platform. Linux, macOS, Windows. Python 3.9+.

Usage

Environment Inspection

pywho
  pywho - Python Environment Inspector
  ==============================================

  Interpreter
    Executable: /Users/dev/.venv/bin/python3
    Version:    3.12.3 (CPython)
    Compiler:   Clang 15.0.0 (clang-1500.3.9.4)
    Architecture: 64-bit

  Platform
    System:  Darwin 24.1.0
    Machine: arm64

  Virtual Environment
    Active: Yes
    Type:   uv
    Path:   /Users/dev/myproject/.venv
    Prompt: myproject

  Paths
    Prefix:        /Users/dev/myproject/.venv
    Base Prefix:   /opt/homebrew/Cellar/python@3.12/...
    Site-packages: /Users/dev/myproject/.venv/lib/python3.12/site-packages

  Package Manager
    Detected:    uv
    pip version: 24.0

  sys.path
    [0] (empty string = cwd)
    [1] /opt/homebrew/.../python312.zip
    [2] /opt/homebrew/.../python3.12
    ...

JSON output (for CI, scripts, sharing)

pywho --json

Include installed packages

pywho --packages

Skip pip version check (faster)

pywho --no-pip

Run as module

python -m pywho

Import Tracing

Trace exactly where an import resolves and why:

pywho trace requests
  Import Resolution: requests
  ========================================

  Resolved to: /Users/dev/.venv/lib/python3.12/site-packages/requests/__init__.py
  Module type: third-party (package)
  Cached:      No

  Search order:
    [0] /Users/dev/myproject        -> not found
    [1] /usr/lib/python3.12         -> not found
    [2] ~/.venv/lib/.../site-packages -> FOUND

Full search log

pywho trace json --verbose

JSON trace output

pywho trace requests --json

Shadow detection (single module)

$ pywho trace requests

  WARNING: './requests.py' shadows installed package 'requests'

Shadow Scanning

Scan an entire project for files that shadow stdlib or installed packages:

$ pywho scan .

  Found 2 shadow(s)
    2 HIGH (stdlib)

  [HIGH] math.py
         shadows stdlib module 'math'
  [HIGH] json.py
         shadows stdlib module 'json'

Scan with JSON output

pywho scan . --json

Scan stdlib only (skip installed packages)

pywho scan . --no-installed

Smart exclusions — these directories are automatically skipped: .venv, __pycache__, node_modules, dist, build, .git, and more.

Python API

Environment inspection

from pywho import inspect_environment

report = inspect_environment()

print(report.executable)        # /usr/bin/python3
print(report.venv.is_active)    # True
print(report.venv.type)         # "uv"
print(report.package_manager)   # "uv"

# Get JSON-serializable dict
data = report.to_dict()

Import tracing

from pywho import trace_import

trace = trace_import("requests")
print(trace.resolved_path)    # /path/to/requests/__init__.py
print(trace.module_type)      # ModuleType.THIRD_PARTY
print(trace.is_cached)        # True
print(trace.shadows)          # [] (empty = no shadows)

if trace.shadows:
    for s in trace.shadows:
        print(f"WARNING: {s.description}")

Shadow scanning

from pywho import scan_path
from pathlib import Path

results = scan_path(Path("."))
for r in results:
    print(f"[{r.severity.value.upper()}] {r.path} shadows {r.module_name}")

What It Detects

Interpreters

  • CPython, PyPy, and other implementations
  • Version, compiler, architecture (32/64-bit)
  • Build date

Virtual environments

Type Detection method
venv sys.prefix != sys.base_prefix
virtualenv orig-prefix.txt in lib directory
uv uv = in pyvenv.cfg
conda CONDA_DEFAULT_ENV env var
poetry POETRY_ACTIVE env var
pipenv PIPENV_ACTIVE env var

Package managers

Detects: pip, uv, conda, poetry, pipenv, pyenv

Paths

  • sys.prefix, sys.base_prefix, sys.exec_prefix
  • All site-packages directories
  • Full sys.path with index numbers

Packages

With --packages: lists all installed packages with versions and locations.

Import shadows

  • Single-module detection via pywho trace
  • Project-wide scanning via pywho scan
  • Severity levels: HIGH (stdlib) and MEDIUM (installed)

Use Cases

Scenario Command
Debug "works on my machine" pywho --json → paste into issue
Verify onboarding setup pywho
CI environment snapshots pywho --json --packages > env.json
Find why an import is wrong pywho trace <module>
Audit project for shadows pywho scan .
Ask users for their env "Please run pywho"

Platforms

Platform Status
Linux ✅ Supported
macOS ✅ Supported
Windows ✅ Supported
Python Status
3.9+ ✅ Supported
3.10 – 3.14 ✅ Tested in CI

Development

git clone https://github.com/AhsanSheraz/pywho.git
cd pywho
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"
pytest -v
mypy src/pywho

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pywho-0.3.3.tar.gz (18.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pywho-0.3.3-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file pywho-0.3.3.tar.gz.

File metadata

  • Download URL: pywho-0.3.3.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pywho-0.3.3.tar.gz
Algorithm Hash digest
SHA256 f434efc108fd09a8c011d3d81b2308d02234c053fc4bb95c62f68c94b983df57
MD5 f0bd87416b230aa6453723e43c808e7d
BLAKE2b-256 236146f74964fd1f7b611a5eed5eaf7ea8210b8676ca0bda4d736fadc39afe62

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywho-0.3.3.tar.gz:

Publisher: ci.yml on AhsanSheraz/pywho

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pywho-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: pywho-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pywho-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ac5953ea3f98c90cbcdbdedde93afbdce332dae59ff4b8a6c31974afeb1e17a0
MD5 0ec2d2c1c4692739251bcd7f5d46c66b
BLAKE2b-256 d8d925fe3f9b29387e55c779ffba33b194815505afe07348a0139a38df33b499

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywho-0.3.3-py3-none-any.whl:

Publisher: ci.yml on AhsanSheraz/pywho

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page