kboss/kgadget/ubuntu/kgadget.spec
2026-07-02 16:12:04 +08:00

87 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- mode: python ; coding: utf-8 -*-
import os
import dataui
import confluent_kafka # 新增:用于获取动态库路径
from PyInstaller.utils.hooks import collect_dynamic_libs
# ---- 定位 confluent_kafka.libs 目录(关键) ----
kafka_libs_dir = os.path.join(
os.path.dirname(confluent_kafka.__file__),
'..',
'confluent_kafka.libs'
)
kafka_libs_dir = os.path.normpath(kafka_libs_dir)
# 如果目录不存在,尝试另一种常见位置(有时 .libs 直接位于 site-packages 下)
if not os.path.exists(kafka_libs_dir):
alt_dir = os.path.join(
os.path.dirname(os.path.dirname(confluent_kafka.__file__)),
'confluent_kafka.libs'
)
if os.path.exists(alt_dir):
kafka_libs_dir = alt_dir
# 调试输出(打包时会打印在控制台,方便确认)
print(f"[SPEC] Using kafka libs dir: {kafka_libs_dir}, exists: {os.path.exists(kafka_libs_dir)}")
# ---- 收集其他动态库numpy/pandas如果你使用的话 ----
numpy_binaries = collect_dynamic_libs('numpy') if False else [] # 暂不启用,若有问题可单独处理
# scipy_binaries = collect_dynamic_libs('scipy')
pandas_binaries = collect_dynamic_libs('pandas') if False else []
# 这里我们只关心 kafka但为了兼容保留一个空列表
all_binaries = [] # 如果你还有其他二进制文件,可以合并进来
duipath = os.path.dirname(dataui.__file__)
block_cipher = None
# ---- Analysis 部分 ----
a = Analysis(
['../src/kgadget.py'],
pathex=['../src'],
binaries=all_binaries, # 暂时为空,后续如有其他 .so 可加入
datas=[
(f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks'),
# 新增:将整个 confluent_kafka.libs 目录复制到打包目录的 confluent_kafka.libs 下
(kafka_libs_dir, 'confluent_kafka.libs'),
],
hiddenimports=[
'sqlite3',
'aiopg',
'aiomysql',
'confluent_kafka.admin', # 确保子模块被包含
# 如果你还用到其他子模块,可以继续添加
],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
# ---- EXE 部分 ----
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='kgadget',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None, # 如果仍出现解压错误,可在这里指定一个可写目录
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None
)