74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
"""A collection of functions which are triggered automatically by finder when
|
|
tensorflow package is included.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from cx_Freeze._compat import IS_MINGW, IS_WINDOWS
|
|
|
|
if TYPE_CHECKING:
|
|
from cx_Freeze.finder import ModuleFinder
|
|
from cx_Freeze.module import Module
|
|
|
|
|
|
def load_tensorflow(finder: ModuleFinder, module: Module) -> None:
|
|
"""Hook for tensorflow. Tested in Windows and Linux."""
|
|
module_path = module.file.parent
|
|
site_packages_path = module_path.parent
|
|
|
|
# implicitly loaded packages
|
|
finder.include_package("tensorboard")
|
|
finder.include_package("tensorflow.compiler")
|
|
finder.include_package("tensorflow.python")
|
|
|
|
# support for plugins
|
|
source_path = site_packages_path / "tensorflow-plugins"
|
|
if source_path.is_dir():
|
|
pattern = "*.dll" if (IS_WINDOWS or IS_MINGW) else "*.so"
|
|
for source in source_path.rglob(pattern): # type: Path
|
|
target = "lib" / source.relative_to(site_packages_path)
|
|
finder.include_files(source, target)
|
|
|
|
# patch the code to search the correct directory
|
|
code_string = module.file.read_text(encoding="utf_8")
|
|
code_string = code_string.replace(
|
|
"_site_packages_dirs = []",
|
|
"_site_packages_dirs = [_os.path.join(_sys.frozen_dir,'lib')]",
|
|
)
|
|
code_string = code_string.replace(
|
|
"_current_file_location = ",
|
|
"_current_file_location = __file__.replace('library.zip/', '') #",
|
|
)
|
|
module.code = compile(
|
|
code_string,
|
|
module.file.as_posix(),
|
|
"exec",
|
|
dont_inherit=True,
|
|
optimize=finder.optimize,
|
|
)
|
|
|
|
# installed version of tensorflow is a variant?
|
|
if module.distribution is None:
|
|
for name in (
|
|
"tensorflow-aarch64",
|
|
"tensorflow-cpu",
|
|
"tensorflow-cpu-aws",
|
|
"tensorflow-gpu",
|
|
"tensorflow-intel",
|
|
"tensorflow-macos",
|
|
"tensorflow-rocm",
|
|
):
|
|
module.update_distribution(name)
|
|
if module.distribution is not None:
|
|
break
|
|
|
|
# remove run-time warning
|
|
# WARNING:tensorflow:AutoGraph is not available in this environment: ...
|
|
source_path = site_packages_path / "tensorflow/python/autograph"
|
|
for source in source_path.rglob("*.py"): # type: Path
|
|
target = "lib" / source.relative_to(site_packages_path)
|
|
finder.include_files(source, target)
|
|
finder.exclude_module("tensorflow.python.autograph")
|