Sikuwa first commit
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
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
This commit is contained in:
68
nuitka_loader.py
Normal file
68
nuitka_loader.py
Normal file
@@ -0,0 +1,68 @@
|
||||
"""
|
||||
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()
|
||||
Reference in New Issue
Block a user