diff --git a/python/setup.py b/python/setup.py index c65aefa1d..726f5b344 100644 --- a/python/setup.py +++ b/python/setup.py @@ -3,6 +3,7 @@ # license that can be found in the LICENSE file. import os +import re import setuptools import setuptools.command.build_ext import shutil @@ -103,6 +104,16 @@ def include_dirs(): extra_compile_args=['-fvisibility=hidden'], ) +# We need `re2` to be a package, not a module, because it appears that +# modules can't have `.pyi` files, so munge the module into a package. +os.makedirs('re2') +with open('re2.py', 'r') as file: + contents = file.read() +contents = re.sub(r'^(?=import _)', 'from . ', contents, flags=re.MULTILINE) +with open(f're2/__init__.py', 'x') as file: + file.write(contents) +# TODO(junyer): `.pyi` files as per https://github.com/google/re2/issues/496. + setuptools.setup( name='google-re2', version='1.1.20240601', @@ -112,7 +123,8 @@ def include_dirs(): author='The RE2 Authors', author_email='re2-dev@googlegroups.com', url='https://github.com/google/re2', - py_modules=['re2'], + packages=['re2'], + ext_package='re2', ext_modules=[ext_module], classifiers=[ 'Development Status :: 5 - Production/Stable', @@ -125,3 +137,5 @@ def include_dirs(): cmdclass={'build_ext': BuildExt}, python_requires='~=3.8', ) + +shutil.rmtree('re2')