Skip to main content

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:

  1. Build the Rust binary:

    cd /workspaces/ruff
    cargo build -p ruff_api_analyzer
    
  2. Run the wrapper script:

    cd crates/ruff_api_analyzer/python
    ./pubscan_cmd.py [args]
    
  3. 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:

  1. 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
  2. Update Version:

    • Update the version in pubscan/__init__.py
    • Make sure all changes are documented
  3. 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
  4. 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
  5. Upload to PyPI:

    • Upload the package:
      twine upload dist/*
      
    • You'll be prompted for your PyPI credentials
  6. Verify the Upload:

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


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

pubscan-0.1.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

pubscan-0.1.2-py3-none-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file pubscan-0.1.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pubscan-0.1.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ad6bed99a59b9552e08c6c3207592fa9c6830275c8437780852d58f9af619581
MD5 7dba3c53991268846d78c7ef40f86042
BLAKE2b-256 781f3e84453a42e3eb441c2de69ebdc2c698be2f5549fbf3ffc73f36d597e8c2

See more details on using hashes here.

File details

Details for the file pubscan-0.1.2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pubscan-0.1.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 095c0a985e10dcf2f4f4ce30ecc1961b72a51c841c20833181dd65a7c1901e65
MD5 154ebc7c41fb8591099f1c370b48d9bd
BLAKE2b-256 ce61e63347ef539d2c1c5baf9f98fd71adb7a6f89c93e225cb15a8900191cda8

See more details on using hashes here.

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