From 11d57f9586bc46d6684440918d855ff994bb05e5 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 15:29:24 +0800 Subject: [PATCH 01/12] =?UTF-8?q?ubuntu=20kgadget.spec=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kgadget/ubuntu/kgadget.spec | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index 56fb832..024d3c9 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -1,14 +1,20 @@ # -*- mode: python ; coding: utf-8 -*- +import os import dataui + +from PyInstaller.utils.hooks import collect_dynamic_libs # 新增导入 + +# 收集 confluent_kafka 的所有动态库 +kafka_binaries = collect_dynamic_libs('confluent_kafka') + duipath = os.path.dirname(dataui.__file__) block_cipher = None - a = Analysis(['../src/kgadget.py'], pathex=['../src'], - binaries=[], + binaries=kafka_binaries, datas=[ (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks') ], From 664336cf3492476a461fd05094560dcdebe65a4f Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 15:47:15 +0800 Subject: [PATCH 02/12] update --- kgadget/ubuntu/kgadget.spec | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index 024d3c9..af33d2d 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -5,8 +5,13 @@ import dataui from PyInstaller.utils.hooks import collect_dynamic_libs # 新增导入 -# 收集 confluent_kafka 的所有动态库 -kafka_binaries = collect_dynamic_libs('confluent_kafka') +# 收集所有科学计算库的动态库 +numpy_binaries = collect_dynamic_libs('numpy') +scipy_binaries = collect_dynamic_libs('scipy') # 如果使用了 scipy +pandas_binaries = collect_dynamic_libs('pandas') # 如果使用了 pandas + +# 合并所有动态库列表 +all_binaries = numpy_binaries + scipy_binaries + pandas_binaries + kafka_binaries duipath = os.path.dirname(dataui.__file__) @@ -14,7 +19,7 @@ block_cipher = None a = Analysis(['../src/kgadget.py'], pathex=['../src'], - binaries=kafka_binaries, + binaries=all_binaries, datas=[ (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks') ], From 273f5ddea5c168e0008c96a174c3fa5b2fdd6cd7 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 15:48:36 +0800 Subject: [PATCH 03/12] update --- kgadget/ubuntu/kgadget.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index af33d2d..755f18a 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -7,7 +7,7 @@ from PyInstaller.utils.hooks import collect_dynamic_libs # 新增导入 # 收集所有科学计算库的动态库 numpy_binaries = collect_dynamic_libs('numpy') -scipy_binaries = collect_dynamic_libs('scipy') # 如果使用了 scipy +# scipy_binaries = collect_dynamic_libs('scipy') # 如果使用了 scipy pandas_binaries = collect_dynamic_libs('pandas') # 如果使用了 pandas # 合并所有动态库列表 From 7e344e12ab141faff8f18bc7d188c2fc8be3b3c6 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 15:52:53 +0800 Subject: [PATCH 04/12] update --- kgadget/ubuntu/kgadget.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index 755f18a..727ac8b 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -11,7 +11,7 @@ numpy_binaries = collect_dynamic_libs('numpy') pandas_binaries = collect_dynamic_libs('pandas') # 如果使用了 pandas # 合并所有动态库列表 -all_binaries = numpy_binaries + scipy_binaries + pandas_binaries + kafka_binaries +all_binaries = numpy_binaries + pandas_binaries + kafka_binaries duipath = os.path.dirname(dataui.__file__) From 7f6961aca03fc5e0d4166616e6bd2ace738bf6ef Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 15:54:59 +0800 Subject: [PATCH 05/12] update --- kgadget/ubuntu/kgadget.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index 727ac8b..f242a29 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -9,6 +9,7 @@ from PyInstaller.utils.hooks import collect_dynamic_libs # 新增导入 numpy_binaries = collect_dynamic_libs('numpy') # scipy_binaries = collect_dynamic_libs('scipy') # 如果使用了 scipy pandas_binaries = collect_dynamic_libs('pandas') # 如果使用了 pandas +kafka_binaries = collect_dynamic_libs('confluent_kafka') # 合并所有动态库列表 all_binaries = numpy_binaries + pandas_binaries + kafka_binaries From 3e07f7aea78e56742d4048c911e20a4bc804fde0 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 16:01:32 +0800 Subject: [PATCH 06/12] update --- kgadget/ubuntu/kgadget.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index f242a29..09c38b6 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -12,7 +12,7 @@ pandas_binaries = collect_dynamic_libs('pandas') # 如果使用了 pandas kafka_binaries = collect_dynamic_libs('confluent_kafka') # 合并所有动态库列表 -all_binaries = numpy_binaries + pandas_binaries + kafka_binaries +all_binaries = kafka_binaries duipath = os.path.dirname(dataui.__file__) From 43dfaf1a8540a7d57358ec20ac5d4d4495c0e9b6 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 16:12:04 +0800 Subject: [PATCH 07/12] update --- kgadget/ubuntu/kgadget.spec | 123 +++++++++++++++++++------------- kgadget/ubuntu/kgadget_bak.spec | 60 ++++++++++++++++ 2 files changed, 135 insertions(+), 48 deletions(-) create mode 100644 kgadget/ubuntu/kgadget_bak.spec diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index 09c38b6..d100176 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -2,59 +2,86 @@ import os import dataui +import confluent_kafka # 新增:用于获取动态库路径 +from PyInstaller.utils.hooks import collect_dynamic_libs -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) -# 收集所有科学计算库的动态库 -numpy_binaries = collect_dynamic_libs('numpy') -# scipy_binaries = collect_dynamic_libs('scipy') # 如果使用了 scipy -pandas_binaries = collect_dynamic_libs('pandas') # 如果使用了 pandas -kafka_binaries = collect_dynamic_libs('confluent_kafka') +# 如果目录不存在,尝试另一种常见位置(有时 .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 -# 合并所有动态库列表 -all_binaries = kafka_binaries +# 调试输出(打包时会打印在控制台,方便确认) +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 -a = Analysis(['../src/kgadget.py'], - pathex=['../src'], - binaries=all_binaries, - datas=[ - (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks') - ], - hiddenimports=[ - 'sqlite3', - 'aiopg', - 'aiomysql' - ], - 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) +# ---- 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 +) -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 ) +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 +) \ No newline at end of file diff --git a/kgadget/ubuntu/kgadget_bak.spec b/kgadget/ubuntu/kgadget_bak.spec new file mode 100644 index 0000000..09c38b6 --- /dev/null +++ b/kgadget/ubuntu/kgadget_bak.spec @@ -0,0 +1,60 @@ +# -*- mode: python ; coding: utf-8 -*- + +import os +import dataui + +from PyInstaller.utils.hooks import collect_dynamic_libs # 新增导入 + +# 收集所有科学计算库的动态库 +numpy_binaries = collect_dynamic_libs('numpy') +# scipy_binaries = collect_dynamic_libs('scipy') # 如果使用了 scipy +pandas_binaries = collect_dynamic_libs('pandas') # 如果使用了 pandas +kafka_binaries = collect_dynamic_libs('confluent_kafka') + +# 合并所有动态库列表 +all_binaries = kafka_binaries + +duipath = os.path.dirname(dataui.__file__) + +block_cipher = None + +a = Analysis(['../src/kgadget.py'], + pathex=['../src'], + binaries=all_binaries, + datas=[ + (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks') + ], + hiddenimports=[ + 'sqlite3', + 'aiopg', + 'aiomysql' + ], + 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(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 ) From 6e61a0847d1f78e1bc7736fe794bbbeaaa58ab98 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 16:20:28 +0800 Subject: [PATCH 08/12] update --- kgadget/ubuntu/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kgadget/ubuntu/build.sh b/kgadget/ubuntu/build.sh index 156f064..296c3da 100644 --- a/kgadget/ubuntu/build.sh +++ b/kgadget/ubuntu/build.sh @@ -1 +1 @@ -pyinstaller -y --clean kgadget.spec +pyinstaller -y --clean --onedir kgadget.spec From 75a3f81b7a2d60e498d3aaaba9cedc37acb6a722 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 16:24:50 +0800 Subject: [PATCH 09/12] update --- kgadget/ubuntu/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kgadget/ubuntu/build.sh b/kgadget/ubuntu/build.sh index 296c3da..f41c03b 100644 --- a/kgadget/ubuntu/build.sh +++ b/kgadget/ubuntu/build.sh @@ -1 +1 @@ -pyinstaller -y --clean --onedir kgadget.spec +pyinstaller --onedir -y --clean kgadget.spec From 242f578fadba0537ab5777826c5970b7db46a4a0 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 16:35:19 +0800 Subject: [PATCH 10/12] update --- kgadget/ubuntu/build.sh | 2 +- kgadget/ubuntu/kgadget.spec | 43 +++++++++++++++++++++---------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/kgadget/ubuntu/build.sh b/kgadget/ubuntu/build.sh index f41c03b..6f1848b 100644 --- a/kgadget/ubuntu/build.sh +++ b/kgadget/ubuntu/build.sh @@ -1 +1 @@ -pyinstaller --onedir -y --clean kgadget.spec +pyinstaller -y --clean kgadget.spec diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index d100176..4878ea8 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -2,10 +2,11 @@ import os import dataui -import confluent_kafka # 新增:用于获取动态库路径 +import confluent_kafka from PyInstaller.utils.hooks import collect_dynamic_libs -# ---- 定位 confluent_kafka.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__), '..', @@ -13,7 +14,7 @@ kafka_libs_dir = os.path.join( ) 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__)), @@ -22,35 +23,38 @@ if not os.path.exists(kafka_libs_dir): 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)}") +# 打包时打印路径以便确认 +print(f"[SPEC] 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') +# 如果仍然不存在,可以硬编码为你的实际路径(但建议使用动态方式) +# 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 [] -# 这里我们只关心 kafka,但为了兼容,保留一个空列表 -all_binaries = [] # 如果你还有其他二进制文件,可以合并进来 +# 如果有其他二进制文件,可以合并到 all_binaries +all_binaries = [] # 这里暂时为空,因为我们用 datas 处理了 kafka duipath = os.path.dirname(dataui.__file__) block_cipher = None -# ---- Analysis 部分 ---- +# ---- Analysis ---- a = Analysis( ['../src/kgadget.py'], pathex=['../src'], - binaries=all_binaries, # 暂时为空,后续如有其他 .so 可加入 + binaries=all_binaries, # 保留,以防将来需要 datas=[ (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks'), - # 新增:将整个 confluent_kafka.libs 目录复制到打包目录的 confluent_kafka.libs 下 + # 关键:将整个 confluent_kafka.libs 目录复制到打包目录的 confluent_kafka.libs 下 (kafka_libs_dir, 'confluent_kafka.libs'), ], hiddenimports=[ 'sqlite3', 'aiopg', 'aiomysql', - 'confluent_kafka.admin', # 确保子模块被包含 - # 如果你还用到其他子模块,可以继续添加 + 'confluent_kafka.admin', # 确保子模块被包含 + # 如果你使用了其他子模块(如 avro, schema_registry),也在这里添加 ], hookspath=[], hooksconfig={}, @@ -64,7 +68,7 @@ a = Analysis( pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) -# ---- EXE 部分 ---- +# ---- EXE ---- exe = EXE( pyz, a.scripts, @@ -76,12 +80,13 @@ exe = EXE( debug=False, bootloader_ignore_signals=False, strip=False, - upx=True, + upx=False, # 关闭 UPX,防止压缩动态库 upx_exclude=[], - runtime_tmpdir=None, # 如果仍出现解压错误,可在这里指定一个可写目录 + runtime_tmpdir=None, # 你可以指定一个可写目录,如 '/tmp/kgadget' console=True, disable_windowed_traceback=False, target_arch=None, codesign_identity=None, - entitlements_file=None + entitlements_file=None, + onefile=False # 使用 onedir 模式(生成文件夹) ) \ No newline at end of file From 5e34a9993d41e73c4934ac35be88239086575fe3 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 16:43:54 +0800 Subject: [PATCH 11/12] update --- kgadget/ubuntu/kgadget.spec | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index 4878ea8..8205436 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -3,18 +3,15 @@ import os import dataui import confluent_kafka -from PyInstaller.utils.hooks import collect_dynamic_libs +from PyInstaller.utils.hooks import collect_dynamic_libs, collect_submodules -# ---- 定位 confluent_kafka.libs 目录 ---- -# 根据你的实际路径,该方法会得到 /d/zhc/.local/lib/python3.10/site-packages/confluent_kafka.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) - -# 如果上述路径不存在,尝试另一种可能的布局(备选) if not os.path.exists(kafka_libs_dir): alt_dir = os.path.join( os.path.dirname(os.path.dirname(confluent_kafka.__file__)), @@ -23,38 +20,31 @@ if not os.path.exists(kafka_libs_dir): 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 [] +# ---- 收集 numpy/pandas 动态库(若使用) ---- +numpy_binaries = collect_dynamic_libs('numpy') if False else [] # 如果使用,改为 True pandas_binaries = collect_dynamic_libs('pandas') if False else [] -# 如果有其他二进制文件,可以合并到 all_binaries -all_binaries = [] # 这里暂时为空,因为我们用 datas 处理了 kafka +# 我们也可以直接通过 datas 包含它们的 .libs 目录(但更推荐用 collect_dynamic_libs) +# 这里我们先用 collect_dynamic_libs 并合并到 binaries +all_binaries = numpy_binaries + pandas_binaries # 加入 kafka 吗?不,我们用 datas duipath = os.path.dirname(dataui.__file__) block_cipher = None -# ---- Analysis ---- a = Analysis( ['../src/kgadget.py'], pathex=['../src'], - binaries=all_binaries, # 保留,以防将来需要 + binaries=all_binaries, # 包含 numpy/pandas 的 .so datas=[ (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks'), - # 关键:将整个 confluent_kafka.libs 目录复制到打包目录的 confluent_kafka.libs 下 - (kafka_libs_dir, 'confluent_kafka.libs'), + (kafka_libs_dir, 'confluent_kafka.libs'), # 复制整个 kafka 目录 ], hiddenimports=[ 'sqlite3', 'aiopg', 'aiomysql', - 'confluent_kafka.admin', # 确保子模块被包含 - # 如果你使用了其他子模块(如 avro, schema_registry),也在这里添加 + 'confluent_kafka.admin', ], hookspath=[], hooksconfig={}, @@ -68,7 +58,6 @@ a = Analysis( pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) -# ---- EXE ---- exe = EXE( pyz, a.scripts, @@ -80,13 +69,13 @@ exe = EXE( debug=False, bootloader_ignore_signals=False, strip=False, - upx=False, # 关闭 UPX,防止压缩动态库 + upx=False, # 务必关闭 UPX upx_exclude=[], - runtime_tmpdir=None, # 你可以指定一个可写目录,如 '/tmp/kgadget' + runtime_tmpdir=None, console=True, disable_windowed_traceback=False, target_arch=None, codesign_identity=None, entitlements_file=None, - onefile=False # 使用 onedir 模式(生成文件夹) + onefile=False # 显式指定 onefile=False ) \ No newline at end of file From 8b836470d86d206691084559869cd8e60496d3bd Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 2 Jul 2026 17:31:23 +0800 Subject: [PATCH 12/12] update --- kgadget/ubuntu/kgadget.spec | 113 +++++++++++-------------------- kgadget/ubuntu/kgadget_bak1.spec | 81 ++++++++++++++++++++++ 2 files changed, 121 insertions(+), 73 deletions(-) create mode 100644 kgadget/ubuntu/kgadget_bak1.spec diff --git a/kgadget/ubuntu/kgadget.spec b/kgadget/ubuntu/kgadget.spec index 8205436..56fb832 100644 --- a/kgadget/ubuntu/kgadget.spec +++ b/kgadget/ubuntu/kgadget.spec @@ -1,81 +1,48 @@ # -*- mode: python ; coding: utf-8 -*- -import os import dataui -import confluent_kafka -from PyInstaller.utils.hooks import collect_dynamic_libs, collect_submodules - -# ---- 定位 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)}") - -# ---- 收集 numpy/pandas 动态库(若使用) ---- -numpy_binaries = collect_dynamic_libs('numpy') if False else [] # 如果使用,改为 True -pandas_binaries = collect_dynamic_libs('pandas') if False else [] -# 我们也可以直接通过 datas 包含它们的 .libs 目录(但更推荐用 collect_dynamic_libs) -# 这里我们先用 collect_dynamic_libs 并合并到 binaries -all_binaries = numpy_binaries + pandas_binaries # 加入 kafka 吗?不,我们用 datas - duipath = os.path.dirname(dataui.__file__) + block_cipher = None -a = Analysis( - ['../src/kgadget.py'], - pathex=['../src'], - binaries=all_binaries, # 包含 numpy/pandas 的 .so - datas=[ - (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks'), - (kafka_libs_dir, 'confluent_kafka.libs'), # 复制整个 kafka 目录 - ], - 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) +a = Analysis(['../src/kgadget.py'], + pathex=['../src'], + binaries=[], + datas=[ + (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks') + ], + hiddenimports=[ + 'sqlite3', + 'aiopg', + 'aiomysql' + ], + 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( - 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, - console=True, - disable_windowed_traceback=False, - target_arch=None, - codesign_identity=None, - entitlements_file=None, - onefile=False # 显式指定 onefile=False -) \ No newline at end of file +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 ) diff --git a/kgadget/ubuntu/kgadget_bak1.spec b/kgadget/ubuntu/kgadget_bak1.spec new file mode 100644 index 0000000..8205436 --- /dev/null +++ b/kgadget/ubuntu/kgadget_bak1.spec @@ -0,0 +1,81 @@ +# -*- mode: python ; coding: utf-8 -*- + +import os +import dataui +import confluent_kafka +from PyInstaller.utils.hooks import collect_dynamic_libs, collect_submodules + +# ---- 定位 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)}") + +# ---- 收集 numpy/pandas 动态库(若使用) ---- +numpy_binaries = collect_dynamic_libs('numpy') if False else [] # 如果使用,改为 True +pandas_binaries = collect_dynamic_libs('pandas') if False else [] +# 我们也可以直接通过 datas 包含它们的 .libs 目录(但更推荐用 collect_dynamic_libs) +# 这里我们先用 collect_dynamic_libs 并合并到 binaries +all_binaries = numpy_binaries + pandas_binaries # 加入 kafka 吗?不,我们用 datas + +duipath = os.path.dirname(dataui.__file__) +block_cipher = None + +a = Analysis( + ['../src/kgadget.py'], + pathex=['../src'], + binaries=all_binaries, # 包含 numpy/pandas 的 .so + datas=[ + (f'{duipath}/tmpl/bricks/*.*', 'dataui/tmpl/bricks'), + (kafka_libs_dir, 'confluent_kafka.libs'), # 复制整个 kafka 目录 + ], + 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( + 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, + console=True, + disable_windowed_traceback=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + onefile=False # 显式指定 onefile=False +) \ No newline at end of file