Python制作EXE可执行文件

(一)将python程序打包成可执行文件的方式
  • py2exe:需要setup.py配置文件,配置丰富
  • pyinstaller:无需任何配置和参数快速打包,简单易用
  • cx_Freeze:听说支持python3,除此之外一无是处
  • py2app:用于Mac OS,暂不介绍

安装三者方法为(可拆分单独执行):

easy_install pyinstaller py2exe cx_freeze

如果没有安装easy_install,可以下载ez_setup.py,然后执行:python ez_setup.py


(二)先尝试使用最简便的pyinstaller
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__


(三)再来试试稍繁琐点的py2exe
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中使用同样的方法即可解决。


(四)使用总结
  • 比较发现,用pyinstaller生成的单文件EXE要比py2exe生成的体积大,可能是多了一个默认图标
  • pyinstaller开始实验性支持python3了,这是一个好消息
  • cx_freeze难用且未试验成功,强烈不推荐
  • py2exe可直接打包成windows服务,配置项更多,适合深度定制


(五)引用及参考记录

转载于:https://my.oschina.net/cwalet/blog/364861

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值