You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python 2.7脚本转可执行文件后启动即崩溃问题求助

搞定Python 2.7 SSH脚本打包后闪退的问题

兄弟,我之前也踩过Python2.7打包的坑,这种闪退十有八九是打包时漏了依赖库或者运行时抛了异常但你没机会看——毕竟窗口一下就没了,错误信息根本抓不到。先给你几个实用的排查方向:

1. 先把错误信息抓出来(最关键!)

看不到报错等于瞎忙活,先想办法让错误显形:

  • 手动开CMD,cd到exe所在的文件夹,直接输入exe文件名运行,这样窗口不会自动关闭,报错内容会留在屏幕上。
  • 或者给脚本加个异常捕获,把错误写到日志里,还能让窗口停留:
import traceback
try:
    # 把你原来的所有代码都塞到这里面
    import paramiko  # 假设你用的是paramiko做SSH连接
    # ... 你的SSH连接、操作代码 ...
except Exception as e:
    # 把错误写到日志文件
    with open("ssh_error_log.txt", "w") as f:
        f.write("错误信息:\n" + str(e) + "\n\n详细堆栈:\n")
        f.write(traceback.format_exc())
    # 加个输入让窗口别马上关
    raw_input("程序出错啦,按回车键关闭窗口...")

这样哪怕闪退,你也能在ssh_error_log.txt里看到到底哪里出问题了。

2. 检查SSH依赖的打包情况

你用的SSH库(比如paramiko)背后依赖一堆底层库(像cryptographypycrypto,Windows下可能还需要win_inet_pton),打包工具经常会漏这些:

  • 如果用PyInstaller,得手动指定隐藏导入,因为它有时候识别不出间接依赖:
    打包命令改成这样:
    pyinstaller --onefile --hidden-import=paramiko --hidden-import=paramiko.transport --hidden-import=win_inet_pton your_script.py
    
  • 如果用cx_freeze,要在setup.py里明确把依赖列出来:
    from cx_Freeze import setup, Executable
    
    setup(
        name="MySSHClient",
        version="1.0",
        executables=[Executable("your_script.py")],
        options={
            "build_exe": {
                "packages": ["paramiko", "socket"],
                "includes": ["win_inet_pton", "traceback"]
            }
        }
    )
    

3. 确认Python和打包工具的兼容性

Python2.7早就停更了,新的打包工具都不支持它,所以你得用对应版本的打包工具:

  • PyInstaller要选3.x系列(比如3.6,最新的4.x及以上都不支持Python2);
  • cx_freeze也要选支持Python2.7的旧版本(比如5.1.1);
  • 另外,Windows下要保证你的Python和打包工具都是32位或者都是64位,混着来必出问题。

4. 测试最小化的SSH脚本

先写个极简的测试脚本,只保留核心SSH连接逻辑,排除原脚本其他代码的干扰:

import paramiko

try:
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 换成你的服务器信息
    ssh.connect("192.168.1.100", username="test", password="123456")
    print("SSH连接成功!")
    ssh.close()
    raw_input("按回车键关闭...")
except Exception as e:
    print("出错了:", str(e))
    raw_input("按回车键关闭...")

打包这个脚本,如果能正常运行,那就是你原脚本里的其他逻辑有问题;如果还是闪退,那肯定是依赖打包的锅。


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

火山引擎 最新活动