46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import sys
|
|
|
|
from . import utils
|
|
|
|
|
|
def install_shims():
|
|
"""Install shims to fix version incompatibility"""
|
|
install_bottle_import_redirect_shim()
|
|
|
|
|
|
def install_bottle_import_redirect_shim():
|
|
"""
|
|
https://github.com/brentvollebregt/auto-py-to-exe/issues/433 explains that a ModuleNotFoundError is raised when trying
|
|
to import bottle extensions using Python 3.12.
|
|
This shim will patch this issue with some code that is currently on bottle's main branch.
|
|
This shim is only needed on Python versions >=3.12 and bottle versions <=0.12.25 (hoping the next version fixes this issue)
|
|
"""
|
|
|
|
# First check if setting this shim is needed
|
|
if sys.version_info < (3, 12):
|
|
return
|
|
|
|
import bottle
|
|
|
|
if utils.parse_version_tuple(bottle.__version__) > (0, 12, 25):
|
|
return
|
|
|
|
if hasattr(bottle._ImportRedirect, "find_spec"):
|
|
return
|
|
|
|
print(
|
|
f"Info: Installing shim for bottle import redirects (using Python={sys.version_info[0]}.{sys.version_info[1]}.{sys.version_info[2]} and bottle={bottle.__version__})"
|
|
)
|
|
|
|
# Add the shim
|
|
def find_spec(self, fullname, path, target=None):
|
|
if "." not in fullname:
|
|
return
|
|
if fullname.rsplit(".", 1)[0] != self.name:
|
|
return
|
|
from importlib.util import spec_from_loader
|
|
|
|
return spec_from_loader(fullname, self)
|
|
|
|
bottle._ImportRedirect.find_spec = find_spec
|