You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Textual开发的TUI打包一键可执行文件遇阻,求解决办法

Textual TUI打包含第三方CLI依赖的可执行文件解决方案

一、PyInstaller打包问题修复

1. 手动指定隐藏导入

PyInstaller经常漏抓动态导入的依赖,snet.cli大概率是通过动态加载的方式被调用,导致没被打包进去。直接在打包命令里加上隐藏导入参数:

pyinstaller --onefile --add-data 'application/app/style.tcss:application/app/' --hidden-import snet.cli --name "TUI v0.1.0 (MacOS)" application/main.py

如果snet.cli还有子模块被用到,比如snet.cli.commands,也要一并加到--hidden-import后面,用逗号分隔。

2. 用.spec文件精细化配置

如果命令行参数搞不定,生成.spec文件手动编辑更灵活:

  • 先生成.spec文件:
pyinstaller --onefile --add-data 'application/app/style.tcss:application/app/' --name "TUI v0.1.0 (MacOS)" application/main.py --specpath .
  • 打开生成的.spec文件,找到hiddenimports列表,添加snet.cli及其子模块:
hiddenimports=['snet.cli', 'snet.cli.needed_submodule'],
  • 再用.spec文件打包:
pyinstaller "TUI v0.1.0 (MacOS).spec"

3. 验证依赖是否被包含

打包后可以用PyInstaller自带的工具检查内容:

pyi-archive_viewer dist/"TUI v0.1.0 (MacOS)"

搜索snet相关文件,确认是否被正确打包进去。

二、替代打包工具推荐

1. Nuitka

Nuitka把Python代码编译成C再打包,对动态导入的支持比PyInstaller好,性能也更优:

  • 安装:pip install nuitka
  • 打包命令(注意资源文件的路径映射):
python -m nuitka --standalone --onefile --include-data-file=application/app/style.tcss=./application/app/style.tcss --output-filename="TUI v0.1.0 (MacOS)" application/main.py

2. cx_Freeze

配置简单直观,适合小型项目:

  • 安装:pip install cx_Freeze
  • 创建setup.py文件:
from cx_Freeze import setup, Executable

executables = [Executable("application/main.py", base=None, target_name="TUI v0.1.0 (MacOS)")]

setup(
    name="TUI",
    version="0.1.0",
    description="Textual TUI for snet.cli",
    executables=executables,
    options={
        "build_exe": {
            "include_files": [("application/app/style.tcss", "application/app/style.tcss")],
            "packages": ["snet.cli", "textual"],
        }
    }
)
  • 执行打包:python setup.py build

内容的提问来源于stack exchange,提问作者ish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:48:19