Pyinstaller 生成 exe 可以,但是不起作用
Pyinstaller generates the exe ok, but it does not work
我在使用 pyinstaller 生成的 exe 时遇到问题 运行。
我得到的唯一警告是:
11171 WARNING: Hidden import "setuptools.msvc" not found!
其他的还好。当我 运行 程序时,两个 windows (cmd) 打开并自动关闭。
我正在使用:
Python 3.4.4
Pyinstaller 3.4
Windows 10 64b
Pyinstaller 命令是
pyinstaller.exe asd/forcelogoff.py
代码就是这样(工作正常):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paramiko
import os
import cffi
from tkinter import *
from tkinter import ttk, font
# Gestor de geometría (pack)
class Aplicacion():
def __init__(self):
self.raiz = Tk()
self.raiz.title("Force Logoff Agent Asterisk")
fuente = font.Font(weight='bold')
self.etiq1 = ttk.Label(self.raiz, text="Agente:",
font=fuente)
self.agente = StringVar()
self.ctext1 = ttk.Entry(self.raiz,
textvariable=self.agente,
)
self.separ1 = ttk.Separator(self.raiz, orient=HORIZONTAL)
self.boton1 = ttk.Button(self.raiz, text="Aceptar",
command=self.aceptar)
self.boton2 = ttk.Button(self.raiz, text="Cancelar",
command=sys.exit(0))
self.etiq1.pack(side=TOP, fill=BOTH, expand=True,
padx=5, pady=5)
self.ctext1.pack(side=TOP, fill=X, expand=True,
padx=5, pady=5)
self.separ1.pack(side=TOP, fill=BOTH, expand=True,
padx=5, pady=5)
self.boton1.pack(side=LEFT, fill=BOTH, expand=True,
padx=5, pady=5)
self.boton2.pack(side=RIGHT, fill=BOTH, expand=True,
padx=5, pady=5)
self.ctext1.focus_set()
self.raiz.mainloop()
def aceptar(self):
PASSWD = "PASS"
HOST = "IP"
AGENT = "Agent/" + str(self.agente.get())
client = paramiko.SSHClient()
client.load_host_keys(os.path.join(os.path.dirname(__file__), 'known_hosts'))
client.connect("%s" % (HOST), port=22, username="root", password="%s" % (PASSWD), auth_timeout=10)
stdin, stdout, stderr= client.exec_command("/pbx/obelix /pbx/sbin/asterisk -rx 'agent logoff %s'" % (AGENT))
print ("Conexión SSH exitosa.")
print ("Ejecutando comando...")
print (stdout.decode("utf-8"))
print ("Cerrando conexión...")
stdout = stdout.read()
client.close()
print ("Conexión Cerrada")
print (" ")
def main():
mi_app = Aplicacion()
return 0
if __name__ == '__main__':
main()
有什么想法吗?
我无法将您的代码 运行 反编译。您看到第 25 行显示 command=sys.exit(0))
,这意味着一旦应用程序启动,它就会立即关闭。我使用 lambda 函数将其更改为 command=lambda: sys.exit(0))
,以便仅在按下按钮时调用 sys.exit()
。我不完全确定你是如何让它在你的系统上工作的。然后我使用
编译它
pyinstaller forcelogoff.py --onefile
它对我有用,虽然我在 Linux。
我在使用 pyinstaller 生成的 exe 时遇到问题 运行。 我得到的唯一警告是:
11171 WARNING: Hidden import "setuptools.msvc" not found!
其他的还好。当我 运行 程序时,两个 windows (cmd) 打开并自动关闭。
我正在使用:
Python 3.4.4
Pyinstaller 3.4
Windows 10 64b
Pyinstaller 命令是
pyinstaller.exe asd/forcelogoff.py
代码就是这样(工作正常):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paramiko
import os
import cffi
from tkinter import *
from tkinter import ttk, font
# Gestor de geometría (pack)
class Aplicacion():
def __init__(self):
self.raiz = Tk()
self.raiz.title("Force Logoff Agent Asterisk")
fuente = font.Font(weight='bold')
self.etiq1 = ttk.Label(self.raiz, text="Agente:",
font=fuente)
self.agente = StringVar()
self.ctext1 = ttk.Entry(self.raiz,
textvariable=self.agente,
)
self.separ1 = ttk.Separator(self.raiz, orient=HORIZONTAL)
self.boton1 = ttk.Button(self.raiz, text="Aceptar",
command=self.aceptar)
self.boton2 = ttk.Button(self.raiz, text="Cancelar",
command=sys.exit(0))
self.etiq1.pack(side=TOP, fill=BOTH, expand=True,
padx=5, pady=5)
self.ctext1.pack(side=TOP, fill=X, expand=True,
padx=5, pady=5)
self.separ1.pack(side=TOP, fill=BOTH, expand=True,
padx=5, pady=5)
self.boton1.pack(side=LEFT, fill=BOTH, expand=True,
padx=5, pady=5)
self.boton2.pack(side=RIGHT, fill=BOTH, expand=True,
padx=5, pady=5)
self.ctext1.focus_set()
self.raiz.mainloop()
def aceptar(self):
PASSWD = "PASS"
HOST = "IP"
AGENT = "Agent/" + str(self.agente.get())
client = paramiko.SSHClient()
client.load_host_keys(os.path.join(os.path.dirname(__file__), 'known_hosts'))
client.connect("%s" % (HOST), port=22, username="root", password="%s" % (PASSWD), auth_timeout=10)
stdin, stdout, stderr= client.exec_command("/pbx/obelix /pbx/sbin/asterisk -rx 'agent logoff %s'" % (AGENT))
print ("Conexión SSH exitosa.")
print ("Ejecutando comando...")
print (stdout.decode("utf-8"))
print ("Cerrando conexión...")
stdout = stdout.read()
client.close()
print ("Conexión Cerrada")
print (" ")
def main():
mi_app = Aplicacion()
return 0
if __name__ == '__main__':
main()
有什么想法吗?
我无法将您的代码 运行 反编译。您看到第 25 行显示 command=sys.exit(0))
,这意味着一旦应用程序启动,它就会立即关闭。我使用 lambda 函数将其更改为 command=lambda: sys.exit(0))
,以便仅在按下按钮时调用 sys.exit()
。我不完全确定你是如何让它在你的系统上工作的。然后我使用
pyinstaller forcelogoff.py --onefile
它对我有用,虽然我在 Linux。