小白在努力05787 2023-11-02 13:43 采纳率: 66.7%
浏览 9
已结题

框架搭建的py程序如何用pyinstaller正确打包?

下面是我采取框架方式搭建的python程序,以run.py作为启动程序(程序入口),实现程序功能的py文件分别其他文件夹里,每个文件夹里的py程序都有相互引用,使用pyinstaller打包入口程序后,启动run.py时,命令控制行一闪而过
下面是run,py:

# 启动程序run.py
from core import src
if __name__=='__main__':
    src.run()
#src()是核心功能(用户操作界面)

下面是项目文件夹

img

pyinstaller打包:

pyinstaller -D --hidden-import=os;time;json run.py
#之前打包单个程序时pyinstaller无法自动找到内置模块,所以添加了--hidden-import

打包后在这里启动run.exe:

img


生成的依赖文件里面好多看不懂的东西:

img

运行run.exe,终端窗口(黑色的那个窗口)一闪而过
但是我看到主程序把我设置的问候语print出来了

然后在网上找了很多方法都不行(有些看不懂怎么操作的)
后面又尝试几次用run.spec打包,失败
又想到会不会要把其他文件夹也当作模块导入,于是在hiddenimport里面加上其他的文件夹名,失败
现在完全没有头绪,求解(T_T)

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-03 00:37
    关注

    【以下回答由 GPT 生成】

    问题分析

    经过分析,你的项目存在以下问题:

    1. 使用PyInstaller打包后,运行程序时窗口一闪而过。
    2. 在PyInstaller打包时,无法正确找到内置模块。
    3. 对于项目中的其他文件夹,不清楚如何正确导入。

    针对这些问题,我将提供以下解决方案。请按照以下步骤操作。

    解决方案

    1. 重新安装PyInstaller

    首先,你应该尝试重新安装PyInstaller。有时,旧版本的PyInstaller可能会导致一些问题。请按照以下步骤重新安装PyInstaller:

    1. 打开命令行终端。
    2. 运行以下命令卸载PyInstaller:

    shell pip uninstall pyinstaller

    1. 确认是否卸载成功。运行以下命令检查是否还存在PyInstaller:

    shell pip show pyinstaller

    如果未找到PyInstaller,请继续下一步;否则,请确保卸载成功后继续下一步。

    1. 重新安装PyInstaller。运行以下命令重新安装PyInstaller:

    shell pip install pyinstaller

    再试一次使用PyInstaller打包,并尝试运行生成的可执行文件。如果问题仍然存在,请继续下一步。

    2. 创建run.spec文件

    创建一个名为run.spec的文件,用于指定PyInstaller打包时的参数和配置。

    run.spec文件中,添加以下内容:

    # run.spec文件内容
    import os
    from PyInstaller.utils.hooks import collect_data_files
    
    block_cipher = None
    
    # 添加额外的隐藏导入
    hiddenimports = ['os', 'time', 'json']
    
    # 收集数据文件
    datas = collect_data_files('core')
    
    a = Analysis(['run.py'],
                 pathex=[],
                 binaries=[],
                 datas=datas,
                 hiddenimports=hiddenimports,
                 hookspath=[],
                 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='run',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              upx_exclude=[],
              runtime_tmpdir=None,
              console=True )
    
    # 添加资源文件
    if 'TCL_LIBRARY' in os.environ:
        tcl_lib_path = os.environ['TCL_LIBRARY']
        UPX_EXCLUDE_DLL.append(tcl_lib_path)
        a.datas += [ (tcl_lib_path, '') ]
    
    if 'TK_LIBRARY' in os.environ:
        tk_lib_path = os.environ['TK_LIBRARY']
        UPX_EXCLUDE_DLL.append(tk_lib_path)
        a.datas += [ (tk_lib_path, '') ]
    
    # 添加缺失的模块
    missing_modules = []
    for module in missing_modules:
        logger.warning("Missing module: %s" % module)
    
    # 编译
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              a.binaries,
              a.zipfiles,
              a.datas,
              [],
              name='run',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              upx_exclude=[],
              runtime_tmpdir=None,
              console=True)
    coll = COLLECT(exe,
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=True,
                   upx_exclude=[],
                   name='run')
    

    保存run.spec文件。

    3. 使用run.spec文件进行打包

    然后,运行以下命令使用run.spec文件进行打包:

    pyinstaller run.spec
    

    这将使用run.spec文件中定义的参数和配置进行打包。

    再次尝试运行生成的可执行文件是否能够解决问题。如果问题仍然存在,请继续下一步。

    4. 检查其他导入的模块

    根据你提供的项目文件夹结构,假设其他文件夹中的Python文件都是作为模块进行导入的。确保在run.py文件中正确导入其他模块。

    run.py文件中添加以下导入语句:

    from core import src
    

    此外,还需要确保在src.py文件中正确导入其他模块。

    重新运行打包命令并尝试运行生成的可执行文件。这样你的程序应该能够正常运行了。

    结论

    以上就是解决你遇到问题的具体步骤和解决方案。希望可以帮助你解决这个问题。如果你还有任何疑问,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月9日
  • 已采纳回答 11月9日
  • 创建了问题 11月2日

悬赏问题

  • ¥15 Python如何在已有绘图中添加地图底图
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路
  • ¥15 内网办公电脑进行向日葵
  • ¥15 如何输入双曲线的参数a然后画出双曲线?我输入处理函数加上后就没有用了,不知道怎么回事去掉后双曲线可以画出来
  • ¥15 soildworks装配体的尺寸问题