Files
Sikuwa/nuitka_loader.py
so陈 13a1072c6f
Some checks are pending
CI / Test (Python 3.10 on macos-latest) (push) Waiting to run
CI / Test (Python 3.11 on macos-latest) (push) Waiting to run
CI / Test (Python 3.12 on macos-latest) (push) Waiting to run
CI / Test (Python 3.8 on macos-latest) (push) Waiting to run
CI / Test (Python 3.9 on macos-latest) (push) Waiting to run
CI / Test (Python 3.10 on ubuntu-latest) (push) Waiting to run
CI / Test (Python 3.11 on ubuntu-latest) (push) Waiting to run
CI / Test (Python 3.12 on ubuntu-latest) (push) Waiting to run
CI / Test (Python 3.8 on ubuntu-latest) (push) Waiting to run
CI / Test (Python 3.9 on ubuntu-latest) (push) Waiting to run
CI / Test (Python 3.10 on windows-latest) (push) Waiting to run
CI / Test (Python 3.11 on windows-latest) (push) Waiting to run
CI / Test (Python 3.12 on windows-latest) (push) Waiting to run
CI / Test (Python 3.8 on windows-latest) (push) Waiting to run
CI / Test (Python 3.9 on windows-latest) (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Release (push) Blocked by required conditions
Documentation / Build Documentation (push) Waiting to run
Sikuwa first commit
2026-02-20 23:53:48 +08:00

69 lines
2.0 KiB
Python

"""
Nuitka 动态加载器
在运行时将打包的 Nuitka 副本加载到 sys.path
"""
import sys
from pathlib import Path
class NuitkaLoader:
"""管理打包的 Nuitka 副本"""
@staticmethod
def get_bundled_path() -> Path:
"""获取打包的 Nuitka 路径"""
if getattr(sys, 'frozen', False):
# 运行在打包后的 exe 中
if hasattr(sys, '_MEIPASS'):
# PyInstaller/Nuitka 打包
base = Path(sys._MEIPASS)
else:
base = Path(sys.executable).parent
else:
# 开发模式
base = Path(__file__).parent.parent / ".venv" / "Lib" / "site-packages"
return base / "bundled_packages"
@staticmethod
def load_nuitka():
"""加载打包的 Nuitka 到 sys.path"""
bundled_path = NuitkaLoader.get_bundled_path()
if bundled_path.exists():
# 将打包的 packages 目录添加到 sys.path 最前面
bundled_str = str(bundled_path)
if bundled_str not in sys.path:
sys.path.insert(0, bundled_str)
print(f"✓ 已加载打包的 Nuitka: {bundled_path}")
return True
# 回退:尝试使用系统已安装的 Nuitka
try:
import nuitka
print(f"✓ 使用系统 Nuitka: {nuitka.__file__}")
return True
except ImportError:
print("✗ 找不到 Nuitka")
return False
@staticmethod
def ensure_nuitka():
"""确保 Nuitka 可用"""
# 首先尝试加载打包的版本
if NuitkaLoader.load_nuitka():
return True
# 如果都失败,提示用户安装
print("=" * 70)
print("❌ Nuitka 未找到!")
print("\n请安装 Nuitka:")
print(" pip install nuitka ordered-set zstandard")
print("=" * 70)
sys.exit(1)
# 模块导入时自动加载
NuitkaLoader.ensure_nuitka()