mit neuen venv und exe-Files
This commit is contained in:
96
venv3_12/Lib/site-packages/cx_Freeze/hooks/cv2.py
Normal file
96
venv3_12/Lib/site-packages/cx_Freeze/hooks/cv2.py
Normal file
@@ -0,0 +1,96 @@
|
||||
"""A collection of functions which are triggered automatically by finder when
|
||||
opencv-python package is included.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from cx_Freeze._compat import IS_MACOS, IS_MINGW, IS_MINGW64, IS_WINDOWS
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from cx_Freeze.finder import ModuleFinder
|
||||
from cx_Freeze.module import Module
|
||||
|
||||
|
||||
def load_cv2(finder: ModuleFinder, module: Module) -> None:
|
||||
"""Versions of cv2 (opencv-python) above 4.5.3 require additional
|
||||
configuration files.
|
||||
|
||||
Additionally, on Linux the opencv_python.libs directory is not
|
||||
copied across for versions above 4.5.3.
|
||||
"""
|
||||
finder.include_package("numpy")
|
||||
if module.distribution is None:
|
||||
module.update_distribution("opencv-python")
|
||||
|
||||
source_dir = module.file.parent
|
||||
target_dir = Path("lib", "cv2")
|
||||
|
||||
# conda-forge and msys2: cv2 4.6.0 is a extension module
|
||||
if module.path is None:
|
||||
# msys2 files is on 'share' subdirectory
|
||||
if IS_MINGW:
|
||||
if IS_MINGW64:
|
||||
source = Path(sys.base_prefix, "share/qt6/plugins/platforms")
|
||||
else:
|
||||
source = Path(sys.base_prefix, "share/qt5/plugins/platforms")
|
||||
else:
|
||||
source = Path(sys.base_prefix, "plugins/platforms")
|
||||
if source.is_dir():
|
||||
finder.include_files(source, target_dir / "plugins" / "platforms")
|
||||
source = Path(sys.base_prefix, "fonts")
|
||||
if not source.is_dir():
|
||||
source = Path(sys.base_prefix, "share/fonts")
|
||||
if source.is_dir():
|
||||
finder.include_files(source, target_dir / "fonts")
|
||||
qt_conf: Path = finder.cache_path / "qt.conf"
|
||||
lines = ["[Paths]", f"Prefix = {target_dir.as_posix()}"]
|
||||
with qt_conf.open(mode="w", encoding="utf_8", newline="") as file:
|
||||
file.write("\n".join(lines))
|
||||
finder.include_files(qt_conf, qt_conf.name)
|
||||
if IS_MACOS:
|
||||
finder.include_files(qt_conf, "Contents/Resources/qt.conf")
|
||||
return
|
||||
|
||||
# Use optmized mode
|
||||
module.in_file_system = 2
|
||||
finder.include_package("cv2")
|
||||
finder.exclude_module("cv2.config-3")
|
||||
finder.exclude_module("cv2.load_config_py2")
|
||||
module.exclude_names.add("load_config_py2")
|
||||
# include files config.py (empty) and config-3.py (original)
|
||||
source = finder.cache_path / "cv2-config.py"
|
||||
source.touch()
|
||||
finder.include_files(source, target_dir / "config.py")
|
||||
finder.include_files(
|
||||
source_dir / "config-3.py", target_dir / "config-3.py"
|
||||
)
|
||||
# data files
|
||||
data_dir = source_dir / "data"
|
||||
if data_dir.exists():
|
||||
for path in data_dir.glob("*.xml"):
|
||||
finder.include_files(path, target_dir / "data" / path.name)
|
||||
|
||||
# Copy all binary files
|
||||
if IS_WINDOWS:
|
||||
for path in source_dir.glob("*.dll"):
|
||||
finder.include_files(path, target_dir / path.name)
|
||||
return
|
||||
|
||||
if IS_MACOS:
|
||||
libs_dir = source_dir / ".dylibs"
|
||||
if libs_dir.exists():
|
||||
finder.include_files(libs_dir, target_dir / ".dylibs")
|
||||
return
|
||||
|
||||
# Linux and others
|
||||
libs_name = "opencv_python.libs"
|
||||
libs_dir = source_dir.parent / libs_name
|
||||
if libs_dir.exists():
|
||||
finder.include_files(libs_dir, target_dir.parent / libs_name)
|
||||
qt_files = source_dir / "qt"
|
||||
if qt_files.exists():
|
||||
finder.include_files(qt_files, target_dir / "qt")
|
||||
Reference in New Issue
Block a user