Python导出exe打包之吐血总结

本文介绍了Python程序员如何将代码打包成可执行文件,特别是exe格式,以解决在没有Python环境或需要保护源代码的场景下使用程序的问题。作者分享了使用pyinstaller和cx_Freeze两个工具的安装、使用方法以及在打包过程中遇到的坑,包括设置启动文件、处理依赖库、解决环境依赖等。此外,还提供了避免错误和测试打包后的exe的建议。
摘要由CSDN通过智能技术生成

作者初学Python已经大半年了,学了基本语法后,写了一些工具类的程序,类型包含GUI应用程序和控制台应用程序。前期运行都是完成编码后,直接在IDE下运行,或通过“python xxx.py”命令来执行程序。这种方式的特点是需要源代码、Python基础环境,以及其它相关的依赖环境。这种局限,导致一些场景下无法使用:1.对方没有python环境,作为软件编写者,不能要求用户一定要安装开发环境,这个是不合理的,2.作者不希望共享源代码,可能是一些机密或利益的原因,不方便开源。

于是,作者就开始研究打包技术了。和其他编程语言一样,Python也能够将代码进行打包,就像c++可以将整个工程打包成exe、dll、lib。python由于自身特点,可以跨平台操作系统执行,它也可以打包成一些能够在各操作系统上支持的格式。而值得一提的是,虽然如此,但是如果你想要在Mac上编译打包成Windows上支持的exe,却是不行的,必须在Windows上进行编译打包,才能打包成功;同理,在Windows上也是打不出mac app格式的包的。

很多编程语言的IDE都是默认自带打包功能的,而Python的打包,就相对“落魄”一点了,需要额外安装第三方的打包工具库,作者了解到的有:cx_Freeze、pyinstaller、distutils、py2exe、py2app。推荐pyinstaller和cx_Freeze,因为这两个库支持全平台以及支持Python2+Python3,其它几个都不支持,首次使用的话,可以从这两个入手。不知道是不是由于是第三方做的工具的原因,打包过程遇到了各种各样的坑,简直就是一段吐血的经历。

下面介绍一下这两个工具。

pyinstaller(作者这次实践的是打包成exe)

  1. 安装

(1) 官网:http://www.pyinstaller.org/

(2) pip install PyInstaller

这种安装方法,简单直接,而且利于后期update pyinstaller时,可以用pip update。

  1. 使用

命令格式:pyinstaller [options] script [script …] | specfile

解释一下:

(1)最简单的情况,不做任何额外配置,直接打包。那命令直接输入:

pyinstaller xxx.py

(2)增加一些配置,常用配置包括
在这里插入图片描述
一个需要经常迭代优化的项目,打包应该是个日常、经常进行的工作;因此用命令是可以,但是如果参数很多的话,而你又执意要用这种方法的话,作者建议把命令存成批处理,每次打包,执行批处理调用这条命令就可以了。

cx_freeze

  1. 安装

下载地址:http://sourceforge.net/projects/cx-freeze/files/

安装完成后,运行cxfreeze.bat,会生成cxfreeze文件。

  1. 使用

新建一个setup.py,代码如下:

from cx_Freeze import setup, Executable

import os

base = None

build_exe_options = {

'include_files':[],

'packages': ['aaa','bbb','ccc'], 

'excludes': [],

}

setup(  name = 'myDemo',

        version = '1.0.0',

        description = 'This is my demo',

        options = {'build_exe': build_exe_options},

        executables = [Executable('main.py', targetName = 'myDemo.exe', base = base)])

然后,执行这个,可以生成安装包以及exe:

python setup.py bdist_msi 

执行这个,可以生成exe:

python setup.py build 

如上操作,你已经够用,成功了,那恭喜你了。可是作者没有这么好运,看似轻松愉快,可是实际中却困难重重。或许作者的工程情况比较复杂。

遇到的坑

(1) setup.py中,在executables变量里面,设置启动的py文件,且不要用下面的这种写法,否则可能程序不会被执行。

if name=main():

main()

(2) 设置了启动py文件,其他的会自动关联。这里需要主要两点:
第一,尽量不要用import,能from…import…就尽量用这个,因为如果是import的话,在打包的时候,会将整个包都打包到exe里面,从而最终的包可能会很大。

第二,如果工程中有些文件在工程内的文件夹里,需要将文件夹名写在setup.py的packages变量中。

(3) 实际生成exe时,报错各种少库。那作者当时做法是,提示少了什么,就先确认本地有没有这个库,有的话,在setup.py的packages变量中将库名写上。

(4) 如果引用的库,使用了CPython,那你打包的机器环境里,可能还需要安装visual studio,且vs安装时要勾选c++模块。

(5) Python 3.6以上里面包括的tk、tcl导入会出现dll错误:ImportError: DLL load failed,这个和cx_Freeze自身有关,如果遇到该问题,可尝试在setup.py中,增加如下:

import os

os.environ['TCL_LIBRARY']='$PYTHONDIR$\\tcl\\tcl8.6'

os.environ['TK_LIBRARY']='$PYTHONDIR$\\tcl\\tk8.6'

'include_files': ['$PYTHONDIR$\\DLLs\\tcl86t.dll', '$PYTHONDIR$\\DLLs\\tk86t.dll']

(6) 打完了包,一定要找一台环境干净的windows做测试,验证是否所有依赖项都打入了包中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值