安装三者方法为(可拆分单独执行):
easy_install pyinstaller py2exe cx_freeze
如果没有安装easy_install,可以下载ez_setup.py,然后执行:python ez_setup.py
pyinstaller --clean -F app.py
参数”-F“表示制作单一EXE文件,具体释义参考:pyinstaller -h
制作成功,但是打开app.exe程序一闪而过后自动关闭,错误信息没有记录。
去掉”-F“参数后重新执行依然没有报错,此时生成的是多文件版本,打开dist/app/app.exe报错:
ImportError: No module named _mssql
奇怪明明导入了pymssql模块并且生成成功了,为何还是找不到sqlserver的连接器?
搜索一番后发现有很多人遇到的问题是:
ImportError: No module named decimal
看来两者一脉相承,在app.py中添加以下代码后打包执行正常:
import uuid import _mssql _mssql.__version__ uuid.ctypes.__version__遇到这类找不到模块但是又有导入的奇葩问题,可以试试再次导入:
运行exe的时候提示缺什么模块就import什么模块,并在代码里面显示的调用一次,我在程序里是调用了__version__
from distutils.core import setup import py2exe #要包含的其它库文件 includes = ['BaseHTTPServer', 'SimpleHTTPServer', 'mimetypes', 'sys', 'urlparse', 'jinja2', 'dbutils', 'job', 're', 'datetime', 'json', 'DBUtils.PooledDB', 'pymssql', 'MySQLdb'] setup( options = {'py2exe' : { #压缩 'compressed' : 1, 'optimize' : 2, 'ascii' : 1, 'packages' : ['encodings'], 'includes' : includes, 'dll_excludes' : ['MSVCP90.dll', 'w9xpopen.exe'], #所有文件打包成一个exe文件 'bundle_files' : 1 } }, #不生成library.zip文件 zipfile = None, console = [ { 'script' : 'app.py', #源文件,程序图标 #'icon_resources' : [(1, 'monitor.ico')] } ] )配置文件setup.py 如上所示,保存后执行:
python setup.py py2exe但是死活执行不了,提示找不到MySQLdb:
ImportError: No module named MySQLdb
这又是一个跟上面找不到模块类似的问题。一番搜索后,找到一篇良心文章,解决如下:
easy_install -m MySQL-python rmdir /Q /S C:\Python27\Lib\site-packages\MySQL_python-1.2.5-py2.7-win32.egg easy_install --always-unzip MySQL-python
然后重新执行py2exe,此时可以正常生成出EXE文件,但是又出现找不到 _mssql的问题……
回到pyinstaller中使用同样的方法即可解决。