A tool for analyzing Python module's public API surface area
Project description
pubscan
A Python tool for analyzing the public API of Python modules or packages.
Installation
Once the package is available on PyPI, you can install it with:
pip install pubscan
For now, you can use the provided wrapper script:
# Build the Rust binary first
cd /workspaces/ruff
cargo build -p ruff_api_analyzer
# Then run the wrapper script
cd crates/ruff_api_analyzer/python
./pubscan_cmd.py --help
Usage
# Basic usage
pubscan PATH_TO_MODULE
# Specify project root (helps analyzer find imports)
pubscan PATH_TO_MODULE --project-root PROJECT_ROOT
# Output JSON format
pubscan PATH_TO_MODULE --output-format json
# Increase verbosity for debugging
pubscan PATH_TO_MODULE -v
Description
The API Analyzer scans Python modules to identify their "public API" - defined as symbols from the target module that are used by external files. This helps you understand which parts of your codebase are actually being used externally, making it easier to maintain backward compatibility.
Examples
Analyze a single Python file:
pubscan path/to/file.py
Analyze a Python package:
pubscan path/to/package/
Analyze with project root specified:
pubscan path/to/package/ --project-root /path/to/project
Development
To work on this package:
-
Build the Rust binary:
cd /workspaces/ruff cargo build -p ruff_api_analyzer
-
Run the wrapper script:
cd crates/ruff_api_analyzer/python ./pubscan_cmd.py [args]
-
For development installation:
cd crates/ruff_api_analyzer/python pip install -e .
For publishing packages to PyPI, see the detailed Publishing Guide.
Publishing to PyPI
To publish this package to PyPI:
-
Prerequisites:
- You'll need a PyPI account, registered at https://pypi.org/account/register/
- Install required tools:
pip install build twine - Make sure you have the latest setuptools:
pip install --upgrade setuptools wheel
-
Update Version:
- Update the version in
pubscan/__init__.py - Make sure all changes are documented
- Update the version in
-
Build the Distribution:
- Build the Rust binary first:
cd /workspaces/ruff cargo build --release -p ruff_api_analyzer
- Then build the Python package:
cd crates/ruff_api_analyzer/python python -m build
- This will create both a source distribution (.tar.gz) and a wheel (.whl) in the
dist/directory
- Build the Rust binary first:
-
Test the Package (optional but recommended):
- Upload to TestPyPI first:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
- Install from TestPyPI:
pip install --index-url https://test.pypi.org/simple/ --no-deps pubscan
- Test that the installation works
- Upload to TestPyPI first:
-
Upload to PyPI:
- Upload the package:
twine upload dist/*
- You'll be prompted for your PyPI credentials
- Upload the package:
-
Verify the Upload:
- Check the package page on PyPI: https://pypi.org/project/pubscan/
- Test the installation from PyPI:
pip install pubscan
For subsequent releases, repeat steps 2-6.
Output Example
Text Output
Public API for /path/to/package:
CLASSES:
PublicClass (3 external usages, public)
Fully qualified: my_package.PublicClass
This is a public class.
Location: /path/to/package/module.py
Imported by: /path/to/client1.py, /path/to/client2.py, /path/to/client3.py
FUNCTIONS:
public_function (2 external usages, public)
Fully qualified: my_package.public_function
This is a public function.
Location: /path/to/package/module.py
Imported by: /path/to/client1.py, /path/to/client2.py
Found 2 public API symbols with external usage.
JSON Output
The JSON output provides the same information in a machine-readable format, useful for integration with other tools or automation.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pubscan-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: pubscan-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 4.1 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e04ddd455a342d46fed2d823a421d5f67265f152612e026afb8535b496696a9f
|
|
| MD5 |
377a7bc12313333f27836effded4b17c
|
|
| BLAKE2b-256 |
8f3961dee57e444dd7e8d8a78f3c644aa2724cfd8bc3a38b7700b1a77aa1076f
|
File details
Details for the file pubscan-0.1.4-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: pubscan-0.1.4-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.7 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f023d360ec5fbff15f4602d820891702db2833e6ec928fbfa962fa8fb5b1e6d
|
|
| MD5 |
2017fff6f1b2c8467821d0b7b2fff4fd
|
|
| BLAKE2b-256 |
560f3956699fcd6badb14ae5a997c5d3d6da32a4a605eabfb10f1a6fbc79114d
|