2011-11-26 22 views
1

我編寫了一個wxPython GUI,其中我通過使用「導入數據」爲包含多個列表的模塊文件配置了一些小部件和一些默認值。如何在py2exe編譯後保留「導入」功能

但我需要編譯整個程序使用py2exe爲用戶沒有python安裝。 這樣做時,我失去了讓用戶編輯data.py文件來更改這些配置默認值的能力。

我可以把每個列表作爲一系列文本字符串並讀取和解析整個事情,但是當python已經可以通過簡單的import語句完成所有操作時,看起來像是一個巨大的浪費。

我大概可以用XRC/XML或也許ConfigParser做到這一點,但它似乎應該有一個排序 進口的data.txt

或類似的東西,讓蟒蛇一個簡單的方法做的事情!然後,當py2exe獲取它時,它不會爲data.txt文件創建不可編輯的字節碼。

有什麼建議嗎?

+0

看來,'exec'模塊就是我正在尋找的。我可以將列表語句保留在文本文件中,將該文件作爲字符串讀取,然後使用exec(字符串)獲取我想要的列表。 (和這後我已經實施醜陋的XML - 哦) – kmceng

+0

exec不是一個模塊,它是一個關鍵字/語句,並在python 3,一個函數。請小心,只需檢查[this](http://stackoverflow.com/questions/1832940/is-using-eval-in-python-a-bad-practice) – joaquin

回答

0

導入的文件被py2exe捆綁在可執行文件中。要走的路是使用一個配置文件,您可以使用zip或Inno Setup將其與可執行文件一起打包。配置文件是在某個時刻改變的文件,反之用戶不應該修改python腳本。我告訴你,因爲一些'負面'的經驗說一些禮貌。對於我的程序(幾乎全部使用wxPython GUI),我使用py模塊來配置數據(目錄等)和一些全局變量。如果程序沒有找到我的.ini文件,或者該特定參數未在ini中設置,則使用此模塊加載默認參數。然後我用inno安裝程序發佈一切(exe和輔助文件)。

+0

好的,但是如何「導入」一個config.ini文件?當我導入一個.py文件時,每個var_name = ['a','b','cdata',67 .....]都很好地作爲python列表來使用,而不必解析文本字符串等。 (安全性不是真正的問題,因爲最終用戶是內部的) – kmceng

+1

如果您想要以列表和字典的形式加載/導入更多結構化的東西,但仍然能夠手動讀取和寫入,一個強大的解決方案是使用JSON文件。 [ConfigObj](http://www.voidspace.org.uk/python/configobj.html#introduction)庫是python oficial解析器的替代,也允許讀取值列表。 – joaquin