Files
aufbau2csv/venv3_12/Lib/site-packages/cx_Freeze/hooks/_libs.py

44 lines
1.3 KiB
Python

"""Helper functions for hooks."""
from __future__ import annotations
from types import CodeType
from typing import TYPE_CHECKING
from cx_Freeze.common import code_object_replace_function
if TYPE_CHECKING:
from cx_Freeze.module import Module
def replace_delvewheel_patch(
module: Module, libs_name: str | None = None
) -> None:
"""Replace delvewheel injections of code to not find for module.libs
directory.
"""
code = module.code
if code is None:
return
if libs_name is None:
libs_name = f"{module.name}.libs"
delvewheel_func_names = "_delvewheel_init_patch_", "_delvewheel_patch_"
consts = list(code.co_consts)
for constant in consts:
if isinstance(constant, CodeType):
name = constant.co_name
if name.startswith(delvewheel_func_names):
source = f"""\
def {name}():
import os, sys
libs_dir = os.path.join(
sys.frozen_dir, "lib", "{libs_name}"
)
if os.path.isdir(libs_dir):
os.add_dll_directory(libs_dir)
"""
code = code_object_replace_function(code, name, source)
break
module.code = code