簡體   English   中英

從已編譯的 python.exe 腳本中讀取 config.py 文件

[英]Read config.py file from a compiled python .exe script

您如何使已編譯的 python 腳本變成 a.exe 導入配置文件?

這是我所擁有的:

#Rest of code that show the display and options are above ^

if __name__ == "__main__":

    cwd = os.getcwd()
    variableCheck = Path(cwd + '/config.py')
    print(variableCheck)
    print(cwd)
    variableCheck.is_file()
    if variableCheck.is_file():
        from config import *

        #Next print uses variables from config

        print("ssh = " + ssh + "\nftp = " + ftp + "\nproftpd = " + proftpd + "\nvsftpd = " + vsftpd + "\nweb = " + web + "\napaweb = " + apaweb + "\nnginweb = " + nginweb + "\nhttps = " + https + "\nsmb = " + smb + "\nsql = " + sql + "\nrsnc = " + rsnc)

        print('Configuration file has been loaded...')

        app = QApplication(sys.argv)
        main = Mainstart()
        main.show()
        sys.exit(app.exec_())
    else:
        print('Ello, you have some configurations to do!')
        app = QApplication(sys.argv)
        main = fconfStart()
        main.show()
        sys.exit(app.exec_())

我沒有添加函數 fconfStart() 或 Mainstart() 因為 1) 它們真的很長 2) 它們不是問題,因為當我收到錯誤提示“無法導入配置”時它們甚至還沒有被調用

fconfStart function 創建 config.py 文件。

第一次運行腳本時,您創建配置文件,然后關閉並重新打開程序以加載配置文件 config.py

第一次啟動腳本時如何創建配置文件。 這是創建確認按鈕時發生的情況(如果有幫助,我在此程序中使用 PyQt5):

#Rest of configuration options that users answer are above this piece of code ^

 def confirmBTTN():
            if self.ssh != '' and self.ftp != '' and self.proftpd != '' and self.vsftpd != '' and self.web != '' and self.apaweb != '' and self.nginweb != '' and self.https != '' and self.smb != '' and self.sql != '' and self.rsnc != '':
                print('saving configurations\n')
                print("ssh=" + self.ssh + ", ftp=" + self.ftp + ", proftpd=" + self.proftpd + ", vsftpd=" + self.vsftpd + ", web=" + self.web + ", apaweb=" + self.apaweb + ", nginweb=" + self.nginweb + ", https=" + self.https + ", smb=" + self.smb + ", sql=" + self.sql + ", rsnc=" + self.rsnc)
                f = open("./config.py", "a+")
                f.write("ssh = " + '"{}"'.format(self.ssh) + "\nftp = " + '"{}"'.format(self.ftp) + "\nproftpd = " + '"{}"'.format(self.proftpd) + "\nvsftpd = " + '"{}"'.format(self.vsftpd) + "\nweb = " + '"{}"'.format(self.web) + "\napaweb = " + '"{}"'.format(self.apaweb) + "\nnginweb = " + '"{}"'.format(self.nginweb) + "\nhttps = " + '"{}"'.format(self.https) + "\nsmb = " + '"{}"'.format(self.smb) + "\nsql = " + '"{}"'.format(self.sql) + "\nrsnc = " + '"{}"'.format(self.rsnc))
                f.close()

                RESTART = QMessageBox()
                RESTART.setWindowTitle("Hey! Listen!")
                RESTART.setText("Reopen the program to continue.")
                RESTART.setIcon(QMessageBox.Information)
                RESTART.setWindowIcon(QtGui.QIcon('HEY.png'))
                RESTART.setStandardButtons(QMessageBox.Close)
                RESTART.buttonClicked.connect(lambda: sys.exit(0))
                x = RESTART.exec_()
            else:
                HEY = QMessageBox()
                HEY.setWindowTitle('Hey! Listen!')
                HEY.setText("Hey! You have not finished filling in all of the choices!")
                HEY.setIcon(QMessageBox.Critical)
                HEY.setWindowIcon(QtGui.QIcon('HEY.png'))
                x = HEY.exec_()

示例 Config.py

ssh = "yes"
ftp = "yes"
proftpd = "yes"
vsftpd = "no"
web = "yes"
apaweb = "yes"
nginweb = "no"
https = "yes"
smb = "yes"
sql = "yes"
rsnc = "no"

(如果我需要使用不同類型的配置文件,請告訴我)這是腳本創建的。 然后,當我重新打開腳本以使用這個新創建的配置文件時,我得到了錯誤:

Traceback (most recent call last):
  File "ScriptGUIrunner.py", line 380, in <module>
    from config import *
ModuleNotFoundError: No module named 'config'
[20724] Failed to execute script ScriptGUIrunner

誰能幫我解決這個問題? 任何幫助是極大的贊賞。 如果您需要我添加一些內容來幫助澄清問題,我會很樂意這樣做。

當您將 python 腳本轉換為 .exe 時,您將失去動態加載 python 文件的能力(另外它可能會導致靜默錯誤)。

一般來說,如果您想永久保存信息,那么您應該使用任何類型的文件(例如 .txt),但最好使用預先建立的格式(例如 .ini、.yaml、.csv 等)並使用一個可以安全讀取的庫,例如 ConfigParser、QSettings 等。

另一方面,您不應該使用getcwd()但您應該按照此問題的答案動態獲取信息。

暫無
暫無

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

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