2016年11月5日 星期六

[python] wxpython + py2exe無法成功

之前都是做console的程式,用的也都是python內建的東西,因此py2exe都沒遇到什麼特別的問題
今天使用wxpython寫了個程式,想用py2exe包給別人用,發現包不起來!
出現這樣的訊息
No such file or directory: 'MSVCP90.dll'

網路上有人提到,把msvcp90.dll排除就可以了,如下(來源):
python setup.py py2exe --dll-excludes=MSVCP90.DLL

執行檔做好了,又發現另一個問題,就是GUI視窗做好了,但是除了我要的windows視窗程式以外,也帶出來另一個console視窗,看起來很low.....

可以把
setup(console=['__main__.py'])
換成
setup(windows=['__main__.py'])

這樣就只會出現視窗,不會有console畫面了

另一個問題就是…整個要執行的程式資料夾很大,還不清楚怎麼縮小,如果有人研究出來了,再請跟我說一下~

---------- 2016/11/07 補上  -----------
因為上面的方式在沒有安裝MSVCP90.dll的電腦會有問題
補上新的方式解決,以下為主要二個檔案的內容
(參考資料為:連結1連結2)
連同我的程式共三個檔案放在同一個資料夾中

在build完後,在[dist]中的就是我們要的執行檔,目前這個方法已經可以把所有需要的檔案都包成一個執行檔,要提供給別人非常方便
但我們會發現在同一個資料夾中還有另一個檔案[w9xpopen.exe]
這個檔案是為了在windows95, 98的電腦中使用sys.popen()這個指令用的
因為我們沒有想要相容於windows95, 98的電腦,只要XP以上能跑就可以了,所以這個檔案可以刪掉!!
把單一個執行檔提供給別人就好了!



[make.bat]的內容
echo Start_to_build_exe
cd /d E:\workspace\python\py2exe\RTUC_gui_v1.0.2_vc9_zip
python my_setup.py install
python my_setup.py py2exe
pause

[my_setup.py]的內容
#!/usr/bin/python

#setup(console=["rtuc.py"])#will show console windows
#setup(windows=["rtuc.py"])

from distutils.core import setup
import py2exe

includes = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
            'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
            'Tkconstants', 'Tkinter']
packages = []
dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll',
                'tk84.dll']

setup(
    options = {"py2exe": {"compressed": 2,
                          "optimize": 2,
                          "includes": includes,
                          "excludes": excludes,
                          "packages": packages,
                          "dll_excludes": dll_excludes,
                          "bundle_files": 1,
                          "dist_dir": "dist",
                          "xref": False,
                          "skip_archive": False,
                          "ascii": False,
                          "custom_boot_script": '',
                         }
              },
    zipfile = None,
    windows=['rtuc.py']
)



沒有留言:

張貼留言