kboss/kgadget/ubuntu/kgadget.spec
2026-07-02 16:35:19 +08:00

92 lines
2.9 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 目录 ----
# 根据你的实际路径,该方法会得到 /d/zhc/.local/lib/python3.10/site-packages/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)
# 如果上述路径不存在,尝试另一种可能的布局(备选)
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] Kafka libs dir: {kafka_libs_dir}, exists: {os.path.exists(kafka_libs_dir)}")
# 如果仍然不存在,可以硬编码为你的实际路径(但建议使用动态方式)
# kafka_libs_dir = "/d/zhc/.local/lib/python3.10/site-packages/confluent_kafka.libs"
# ---- 收集其他动态库(如 numpy, pandas ----
# 如果你确实使用了它们,可以取消注释并同样处理
numpy_binaries = collect_dynamic_libs('numpy') if False else []
pandas_binaries = collect_dynamic_libs('pandas') if False else []
# 如果有其他二进制文件,可以合并到 all_binaries
all_binaries = [] # 这里暂时为空,因为我们用 datas 处理了 kafka
duipath = os.path.dirname(dataui.__file__)
block_cipher = None
# ---- Analysis ----
a = Analysis(
['../src/kgadget.py'],
pathex=['../src'],
binaries=all_binaries, # 保留,以防将来需要
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', # 确保子模块被包含
# 如果你使用了其他子模块(如 avro, schema_registry也在这里添加
],
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=False, # 关闭 UPX防止压缩动态库
upx_exclude=[],
runtime_tmpdir=None, # 你可以指定一个可写目录,如 '/tmp/kgadget'
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
onefile=False # 使用 onedir 模式(生成文件夹)
)