簡體   English   中英

使用 pyinstaller 將其轉換為 exe 后,帶有單例的 python 腳本不起作用

[英]python script with singleton doesn't work after converting it to exe with pyinstaller

我已經在 python 中創建了我的應用程序,我希望一次只執行一個應用程序。 所以我使用了單例方法:

from math import fmod
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import SIGNAL
import tendo
import pywinusb.hid as hid
import sys
import os
import time
import threading
import UsbHidCB05Connect


if __name__ == "__main__":

    just_one = tendo.singleton.SingleInstance()

    app = QtGui.QApplication(sys.argv)

    screen_UsbHidConnect = ConnectFunction()
    screen_UsbHidConnect.show()

    sys.exit(app.exec_())

使用 pyinstaller 將其轉換為 exe 時,我沒有收到任何錯誤,但是當我嘗試運行該 exe 時,出現錯誤:“無法執行腳本 mainUsbHidCB05v01”

如果在我的代碼中我評論:

import tendo

just_one = tendo.singleton.SingleInstance()

我將腳本轉換為 exe,該 exe 運行沒有任何問題。 但是我可以運行多個實例/程序,而我不希望那樣。

我正在使用 pyinstaller,例如:

pyinstaller --noconsole -F -i cr.ico mainUsbHidCB05v01.py

我也試過沒有 -F 選項的 pyinstaller。 結果是一樣的。

任何人都知道為什么在代碼中使用單例選項時 exe 不運行?

謝謝。

我遇到了同樣的問題,我沒有找到使用tendo的單一實例的方法。 如果您現在需要一個解決方案,您可以使用“os”庫創建一個文件,並在那里放置一個變量,當程序運行時它為 1,否則為 0,因此您只需在開始時驗證該變量你的程序。 這不是最好的方法,但您可以在需要找到最佳解決方案的時候使用它。 :)

你好,又是我! 所以,我找到了解決方案。 我搜索了很多,我發現了讓程序只運行一次(單一實例)的非常不同的方法。

總之,使用庫操作系統可以使用鎖定文件,但是如果計算機因能量下降而關閉,則該文件在返回時將保持鎖定您的應用程序,因為應用程序沒有正確關閉。 還有另外一種方式,當您使用 TENDO 庫創建單例時,也有類似的方式,但是每個人都使用某些特定的 DLL,而當您使用 pyinstaller 時,添加/導入 dll 可能會有些困難。

最后,還有第三種方法,它創建與 PC 的套接字通信,以驗證應用程序是否正在使用某個特定端口。 這對我來說就像一種魅力。 該庫是: https : //pypi.org/project/Socket-Singleton/

一個簡單可行的腳本:

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!")
 

我將它與我的應用程序一起使用並使用 pyinstaller 創建了一個 .EXE 文件,它運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM