11# python_src/analytics.spec
22
33# -*- mode: python ; coding: utf-8 -*-
4+ import os
5+ from PyInstaller .utils .hooks import collect_data_files , collect_dynamic_libs
46
5- from PyInstaller .utils .hooks import collect_data_files
7+ # --- БЛОК 1: Определяем абсолютные пути ---
8+
9+ # Получаем абсолютный путь к папке, где лежит этот .spec файл.
10+ # Это делает сборку независимой от того, откуда запускается PyInstaller.
11+ SPEC_DIR = os .path .abspath (os .path .dirname (__file__ ))
12+
13+ # --- БЛОК 2: Подготовка данных и библиотек ---
614
715# Собираем данные: модель ONNX и все данные из ultralytics.
8- # Это самый надежный способ включить все, что нужно .
16+ # Пути теперь строятся от абсолютного пути к .spec файлу .
917datas = [
10- ('yolov8n.onnx' , '.' ),
18+ (os . path . join ( SPEC_DIR , 'yolov8n.onnx' ) , '.' ),
1119 * collect_data_files ('ultralytics' )
1220]
1321
14- # Исключаем тяжелые и ненужные пакеты, чтобы уменьшить размер
22+ # Собираем бинарные файлы (.dll, .so) для onnxruntime и cv2.
23+ binaries = []
24+ binaries += collect_dynamic_libs ('onnxruntime' )
25+ binaries += collect_dynamic_libs ('cv2' )
26+
27+ # Явно указываем импорты.
28+ hiddenimports = [
29+ 'numpy' ,
30+ 'cv2' ,
31+ 'onnxruntime' ,
32+ 'scipy' ,
33+ 'ultralytics' ,
34+ 'ultralytics.engine.results' ,
35+ 'PIL' ,
36+ ]
37+
38+ # Исключаем ненужные тяжелые библиотеки.
1539excludes = [
1640 'torch' ,
1741 'torchvision' ,
@@ -22,28 +46,33 @@ excludes = [
2246 'tkinter'
2347]
2448
49+ # --- БЛОК 3: Основная конфигурация Analysis ---
50+
2551a = Analysis (
26- ['analytics.py' ],
27- pathex = [],
28- binaries = [] ,
52+ [os . path . join ( SPEC_DIR , 'analytics.py' )], # Явно указываем абсолютный путь к скрипту
53+ pathex = [SPEC_DIR ], # Указываем, где искать импорты
54+ binaries = binaries ,
2955 datas = datas ,
30- hiddenimports = [], # Хуки PyInstaller для ultralytics должны справиться сами
56+ hiddenimports = hiddenimports ,
3157 hookspath = [],
3258 runtime_hooks = [],
3359 excludes = excludes ,
3460 win_no_prefer_redirects = False ,
3561 win_private_assemblies = False ,
36- cipher = None ,
62+ cipher = None
3763)
3864
65+ # --- БЛОК 4: Сборка исполняемого файла ---
66+
3967pyz = PYZ (a .pure , a .zipped_data , cipher = None )
4068
41- # Собираем все в один исполняемый файл. Без COLLECT.
4269exe = EXE (
4370 pyz ,
4471 a .scripts ,
72+ a .binaries ,
73+ a .zipfiles ,
74+ a .datas ,
4575 [],
46- exclude_binaries = True ,
4776 name = 'analytics' ,
4877 debug = False ,
4978 bootloader_ignore_signals = False ,
0 commit comments