mit neuen venv und exe-Files
This commit is contained in:
78
venv3_12/Lib/site-packages/cx_Freeze/hooks/zoneinfo.py
Normal file
78
venv3_12/Lib/site-packages/cx_Freeze/hooks/zoneinfo.py
Normal file
@@ -0,0 +1,78 @@
|
||||
"""A collection of functions which are triggered automatically by finder when
|
||||
zoneinfo package is included.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
from textwrap import dedent
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from cx_Freeze.finder import ModuleFinder
|
||||
from cx_Freeze.module import Module
|
||||
|
||||
|
||||
def load_zoneinfo(finder: ModuleFinder, module: Module) -> None:
|
||||
"""The zoneinfo package requires timezone data,
|
||||
that can be the in tzdata package, if installed.
|
||||
"""
|
||||
module.global_names.add("TZPATH")
|
||||
try:
|
||||
finder.include_package("tzdata")
|
||||
target_path = "lib/tzdata/zoneinfo"
|
||||
except ImportError:
|
||||
target_path = None
|
||||
|
||||
if target_path is None:
|
||||
# without tzdata, copy zoneinfo directory if available
|
||||
source_path = None
|
||||
zoneinfo = __import__(module.name, fromlist=["TZPATH"])
|
||||
if zoneinfo.TZPATH:
|
||||
for path in zoneinfo.TZPATH:
|
||||
if path.endswith("zoneinfo"):
|
||||
source_path = Path(path).resolve()
|
||||
break
|
||||
if source_path is None or not source_path.is_dir():
|
||||
# add tzdata to missing modules
|
||||
bad_modules = finder._bad_modules # noqa: SLF001
|
||||
callers = bad_modules.setdefault("tzdata", {})
|
||||
callers[f"{module.name}_hook"] = None
|
||||
return
|
||||
if module.in_file_system == 0:
|
||||
finder.zip_include_files(source_path, "tzdata/zoneinfo")
|
||||
return
|
||||
target_path = "share/zoneinfo"
|
||||
finder.include_files(
|
||||
source_path, target_path, copy_dependent_files=False
|
||||
)
|
||||
|
||||
# patch source code
|
||||
if module.file.suffix == ".pyc": # source unavailable
|
||||
return
|
||||
|
||||
source = f"""
|
||||
# cx_Freeze patch start
|
||||
import os as _os
|
||||
import sys as _sys
|
||||
_prefix = _sys.prefix if _sys.prefix else _sys.frozen_dir
|
||||
if _sys.platform == "darwin":
|
||||
_mac_prefix = _os.path.join(_os.path.dirname(_prefix), "Resources")
|
||||
if _os.path.exists(_mac_prefix):
|
||||
_prefix = _mac_prefix # using bdist_mac
|
||||
_os.environ["PYTHONTZPATH"] = _os.path.join(
|
||||
_prefix, _os.path.normpath("{target_path}")
|
||||
)
|
||||
# cx_Freeze patch end
|
||||
"""
|
||||
code_string = module.file.read_text(encoding="utf_8")
|
||||
module.code = compile(
|
||||
dedent(source) + code_string,
|
||||
module.file.as_posix(),
|
||||
"exec",
|
||||
dont_inherit=True,
|
||||
optimize=finder.optimize,
|
||||
)
|
||||
|
||||
|
||||
__all__ = ["load_zoneinfo"]
|
||||
Reference in New Issue
Block a user