带有singleton的python脚本不';使用pyinstaller将其转换为exe后无法工作

带有singleton的python脚本不';使用pyinstaller将其转换为exe后无法工作,python,Python,我已经用python创建了我的应用程序,我希望一次只执行一个应用程序。因此,我使用了单例方法: 从数学导入fmod 从PyQt4导入QtCore、QtGui 从PyQt4.QtCore导入信号 进口肌腱 将pywinusb.hid导入为hid 导入系统 导入操作系统 导入时间 导入线程 导入UsbHidCB05Connect 如果名称=“\uuuuu main\uuuuuuuu”: just_one=tendo.singleton.SingleInstance() app=QtGui.QAppl

我已经用python创建了我的应用程序,我希望一次只执行一个应用程序。因此,我使用了单例方法:

从数学导入fmod
从PyQt4导入QtCore、QtGui
从PyQt4.QtCore导入信号
进口肌腱
将pywinusb.hid导入为hid
导入系统
导入操作系统
导入时间
导入线程
导入UsbHidCB05Connect
如果名称=“\uuuuu main\uuuuuuuu”:
just_one=tendo.singleton.SingleInstance()
app=QtGui.QApplication(sys.argv)
screen_UsbHidConnect=ConnectFunction()
屏幕_UsbHidConnect.show()
sys.exit(app.exec_())
当使用pyinstaller将其转换为exe时,我没有收到任何错误,但当我尝试运行exe时,我收到错误:“未能执行脚本mainUsbHidCB05v01”

如果在我的代码中我注释了:

import tendo

我将脚本转换为exe,exe运行没有任何问题。 但是我可以运行多个实例/程序,我不希望这样

我正在使用pyinstaller,比如:

pyinstaller --noconsole -F -i cr.ico mainUsbHidCB05v01.py
我还尝试了不带-F选项的pyinstaller。结果是一样的

有人知道为什么代码中的singleton选项不能运行exe吗


谢谢。

我也遇到了同样的问题,我没有找到使用tendo的singleinstance的方法。如果您现在需要解决方案,可以使用“os”库创建一个文件,并在其中放置一个变量,当程序运行时,该变量为1,否则为0,因此您只需在程序开始时验证该变量。 这不是最好的方法,但您可以在需要找到最佳解决方案时使用此方法。:)

你好,又是我!所以,我找到了解决办法。我搜索了很多,我发现了非常不同的方法使程序只运行一次(singleinstance)

总之,可以使用库操作系统使用锁定文件,但如果计算机在能量下降时关闭,该文件将在应用程序返回时保持锁定,因为应用程序未正确关闭。还有另一种方法,当您使用TENDO库创建单例时,也有类似的方法,但每个人都使用一些特定的DLL,当您使用pyinstaller时,添加/导入DLL可能有点困难

最后,还有第三种方法,即创建与PC的套接字通信,以验证应用程序是否正在使用某个特定端口。这对我来说很有魅力。图书馆是:

一个简单可行的脚本:

我将它与我的应用程序一起使用,并使用pyinstaller创建了一个.EXE文件,效果非常好

pyinstaller --noconsole -F -i cr.ico mainUsbHidCB05v01.py
from time import sleep
from Socket_Singleton import Socket_Singleton

#Socket_Singleton(address="127.0.0.1", port=1337, timeout=0, client=True, strict=True)
Socket_Singleton()
print("hello!")
sleep(10)
print("hello 2!")