Skip to main content

A script to fix relative imports (from and to nested sub-directories) within compiled `*_pb2.py` Protobuf files.

Project description

fix-protobuf-imports

This script will fix relative imports (from and to nested sub-directories) within compiled *pb2.py and *pb2.pyi Protobuf files/modules generated from protoc --python_out --mypy_out:

fix-protobuf-imports /path/to/python_out/dir

When do I need to fix my imports?

E.g. you might have the following file/module structure:

  • ./
    • a_pb2.py
    • b_pb2.py
    • ./sub/
      • c_pb2.py
      • ./nested/
        • d_pb2.py
        • __init__.py
      • __init__.py
    • __init__.py

Now assume, c.proto is importing a.proto, b.proto and d.proto.

protoc will generate the following import statements for c_pb2.py:

# c_pb2.py

from google.protobuf import descriptor as _descriptor

import a_pb2 as a__pb2
import b_pb2 as b__pb2

from sub.nested import d_pb2 as sub_dot_nested__d__pb2

# ...

Using these modules will not work under Python 3, as the imports are not relative. As it can get quite cumbersome to fix these issues, this script will convert the imports automatically:

fix-protobuf-imports /path/to/python_out/dir

This will result in the following working imports:

# c_pb2.py

from google.protobuf import descriptor as _descriptor

from .. import a_pb2 as a__pb2
from .. import b_pb2 as b__pb2

from ..sub.nested import d_pb2 as sub_dot_nested__d__pb2

# ...

Development

This project uses the Python project managment tool poetry.

  1. Install Poetry
  curl -sSL https://install.python-poetry.org | python3 - --preview
  1. Install dependencies
  poetry install
  1. Test script
  poetry run fix-protobuf-imports --help

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

fix_protobuf_imports-0.1.7.tar.gz (4.2 kB view hashes)

Uploaded Source

Built Distribution

fix_protobuf_imports-0.1.7-py3-none-any.whl (4.6 kB view hashes)

Uploaded Python 3

Supported by

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