-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraphate_entry.py
More file actions
43 lines (32 loc) · 1.27 KB
/
graphate_entry.py
File metadata and controls
43 lines (32 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
"""Точка входа для сборки PyInstaller (исполняемый файл graphate)."""
from __future__ import annotations
import importlib.util
import sys
from pathlib import Path
def _bootstrap_rasterio_serde() -> None:
"""В frozen-сборке ``rasterio.serde`` часто не попадает в PYZ: он импортируется только из Cython ``_base``.
В ``graphate.spec`` кладём ``serde.py`` в ``_MEIPASS/rasterio/`` (datas); здесь
регистрируем модуль до первого ``import rasterio``.
"""
if not getattr(sys, "frozen", False):
return
base = Path(getattr(sys, "_MEIPASS", "") or "")
if not base.is_dir():
return
serde_path = base / "rasterio" / "serde.py"
if not serde_path.is_file():
return
if "rasterio.serde" in sys.modules:
return
spec = importlib.util.spec_from_file_location("rasterio.serde", serde_path)
if spec is None or spec.loader is None:
return
mod = importlib.util.module_from_spec(spec)
sys.modules["rasterio.serde"] = mod
spec.loader.exec_module(mod)
def _run() -> int:
from app.main import main
return main()
if __name__ == "__main__":
_bootstrap_rasterio_serde()
sys.exit(_run())