24 12月 2012

[除蟲] wx 的十小時抗壓大考驗!

果您和我一樣喜歡寫跨平台程式,又希望在不同的平台裡,程式看起來是「一模一樣」的,所以採用 wx 來畫你的圖型介面,但又好死不死遇到這個奇怪的問題,以下是一個小小的「解法」。

狀況>>>
import wx
以後,卻發現 wx 只剩下一個 file_get_contents 的 function,其它的功能全部都不見了!

或是
import wx.lib.agw.xxx
的時候,Python 告訴你 "ImportError" ,找不到 .lib 及其以後的東西!是的,您終於在茫茫網海中找到我這篇苦海明燈了!

原因>>>
不知道哪一位把一個內容貧乏且註解為簡體中文的 wx.py 檔放在
/usr/local/lib/python2.7/dist-packages/wx-1.0.0-py2.7.egg/
目錄下,於是在某些情況下 (註) ,這個貧乏的 wx.py 檔就被視為 wx 模組引入了。
(這種形容方式戰意濃烈啊!)

但憑該檔案貧乏的內容,自然無法為您處理任何 GUI 的工作。

[註] 奇怪的是,這種事並不會「每次都發生」!我遇到的是核心版本一樣的Ubuntu 12.04 LTS, Python2.7 的兩部機器,一部每次都卡住,一部就直接無視那個導致錯誤的 wx.py 檔,從來沒出錯。

解法有二>>>
1). 把
/usr/local/lib/python2.7/dist-packages/wx-1.0.0-py2.7.egg/wx.py 改個名字,比如說 "dummy_wx.py",然後再把同一個目錄下的 wx.pyc 檔砍掉!

2). 更動你的程式原始碼。在 import wx 以前,先做
import wxversion
wxversion.select("2.8")

然後才
import wx

兩種方法擇一即可。

這應該不算是「徹底解決問題的方案」,但…嘿~載入 Python,少做多玩吧!

後記>>>
根據陰國研究,wx 程式開發及運作時順暢與否,與人品有極大正相關性。老實說這個 bug 和我的程式一點關係也沒有。但不解開它,我的程式就不能跑。更可怕的是,這十個小時裡,在兩部機器裡交叉比對的結果,兩部機器的條件一模一樣啊!怎麼會這部可以跑,那部就不行呢?難不成是見鬼了?還是我應該要拿出信用卡來,勇敢地再買一台筆電來做「公正第三方」呢? (呿~想花錢就說咩~找那麼多藉口~) 於是,就在「跨丟鬼」的壓力和要不要刷卡的煎熬中用十個小時的時間,終於讓我「矇」到 bug 所在,並找到解決的辦法了…

0 意見:

張貼留言