好文档 - 专业文书写作范文服务资料分享网站

Python打包exe文件方法汇总【4种】

天下 分享 时间: 加入收藏 我要投稿 点赞

Python打包exe文件方法汇总Python作为解释型语言,发布即公开源码,虽然是提倡开源但是有些时候就是忍不住想打包成exe,不仅仅是为了对代码进行加密,而是为了跨平台。防止有些没有安装py环境的电脑无法运行软件。

目录对python代码打包成exe的方式有4种,py2exe,pyinstaller,cx_Freeze,nuitka,分别对以上4种方法介绍,欢迎纠错和提供新的办法。

py2exe 介绍

py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。

优点:

可以把python打包成exe 缺点:

打包好的 exe只能在相同的系统下运行,比如你在XP系统用py2exe打包好的exe只能在XP上运行,在win7上肯定有问题,而且也是存在在别的XP机子上也可能不能运行,因为一些别的机子可能会缺少dll文件什么的,作者我当时之所以抛弃py2exe 也是因为这个原因;

打包的文件也需要打包同exe下的dll,和一些库的压缩包,不然exe根本跑不起来

打包时候报始终报RuntimeError: BeginUpdateResource错误,就需要拷贝dll文件。C:\\WINDOWS\\system32\\python27.dll复制到dist目录

总之毛病一大堆,基本上已经舍弃了

使用

下载地址

安装好后,准备进行打包

准备一个文件x.py,这个x.py就是想要打包成exe。

然后这x.py同目录下新建一个setup.py,内容如下:

#coding=utf-8

from distutils.core import setup import py2exe

includes = [\#要包含的其它库文件 options = {\ {

\压缩 \ \

\

\所有文件打包成一个exe文件 } }

setup (

options = options,

zipfile=None, #不生成library.zip文件

console=[{\\\[(1, \}]#源文件,程序图标)

然后这cmd窗口下运行: python setup.py py2exe

py2exe使用方法 (含一些调试技巧,如压缩email 类)

pyinstaller

PyInstaller除了win32平台外还支持Linux,Unix平台.py2exe的用法在前面的博文里已经有了,现在看看PyInstaller,pyinstaller是目前应用最多的python打包工具,也是我最常用的。

PyInstaller本身并不是Python模块,所以安装时随便放在哪儿都行。 优点:

可将python文件转成可执行文件 跨平台

输出的可以是单一目录,也可以是一个单独的打好包的可执行文件。py2exe貌似输出目录。

智能支持python的第三方模块如PyQt,外部数据文件等 支持EGG格式文件

可执行文件可以用UPX压缩,二进制压缩方式 支持控制台和视窗两种方式。

可以选择exe文件的图标 (Windows only) 支持 COM server (Windows only) 缺点:

import导入的问题

pyinstaller是很智能的,只要指定了入口py文件,那么它就会根据代码自动查找需要导入的包。但是隐式导入的话,平常运行是没有问题的,举例:

# test1.py

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

DB_CONNECT_STRING = 'mysql+pymysql://root:123456@localhost/study'

engine = create_engine(DB_CONNECT_STRING, echo = False) DB_Session = sessionmaker(bind = engine) session = DB_Session()

print('this is my test')

运行这个ORM库的初始化引擎,是没有问题的,在console得到结果: this is my test

那么我们开始打包,使用最简单的pyinstaller test1.py。打包完成后,在当前目录下有个dist文件夹,进入dist下的test1文件夹,然后打开cmd,运行这个exe,我们就会发现:

提示: no model named ‘pymysql’

这是怎么回事呢?那么问题来了,sqlalchemy这个库在初始化的时候是不需要显示导入引擎库的,它自己有一个create_engine()的函数来初始化,这个字符串是使用者根据规则来自己填写的。其实解决的方法很简单,我们只要在显式导入pymysql这个库即可。现在我们导入这个库:

import pymysql

1

重新打包一遍(重新打包的时候记得删除掉spec文件,否则会有缓存,或者是加上–clean选项清除掉),再次运行,现在就没有这个问题了。

多进程打包的问题

官方的CPython存在一个GIL锁,这个锁的存在有很多优点,很多库都是线程安全的,单线程执行的效率也高。在python早期的一个版本中取消掉了GIL,代之以高粒度的锁来实现多线程,但是实际应用中单个线程的效率大大降低。故后来又将GIL这个锁还原回去,所以至今的python2也好还是python3中都会有这个锁。但是这个锁有很大一个问题,那就是效率问题,它导致了python仅仅只能利用一个core来进行数据的计算。所以后面为了弥补这个GIL带来的问题,专家们设计了multiprocessing库,gevent库等。前一个是多进程库,为了解决python用于数据密集型处理的情况;后一个用于异步IO处理的情况,基本原理就是在CPU时钟之间来回切换,简单的例子就是爬虫程序爬取网页的时候。假如有10个url,我们都要去GET它,实际上网络之间的延迟是大大高于计算机内部的,那么这个时间内计算机就切换到下一个。

有时候运用多进程是必须的,这个替代不了,哪怕它占用资源很多。

使用 安装:

pip install pyinstaller 1

使用方法(例子):

pyinstaller -D -p F:\\Python27\\Lib -i logo.ico mian.py 1

-D:打包成多个文件

-p:指定python安装包路径

-i:指定图标,我的图标放在同目录下

mian.py:要打包的文件,和图标放在同目录下了

-D与-F一一对应,-F是打包成一个单独的文件。最后一排加上–noconsole,就是无窗口运行。

如果py程序是多进程的话,使用pyinstaller打包会出现错误,这个时候只要加上一行代码

在:

if name==‘mian’: #新增

multiprocessing.freeze_support()

即可

有的时候你加上图片后打包会出错,这是因为图标里面的格式出错了,需要用图片编辑软件重新对图片内部大小进行设置,这个百度一下吧~

如果要加密混淆代码(其实没有用,一样可以反编译出你的源代码,但是聊胜于无吧)

加上一行 --key=asfweakjhfksafkasdkdbas随便几个字符串

好像要安装依赖包,根据提示安装即可

cx_Freeze

python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller。py2exe恐怕是三者里面知名度最高的一个,但是同时相对来说它的打包质量恐怕也是最差的一个。pyinstaller打包很好,但是操作工序较为复杂,推荐cx_freeze,可以通过pip install cx-freeze 安装。–这是别人的描述,其实我觉得pyinstaller其实挺简单的

使用

安装方法:

打开cmd,输入pip install cx-freeze 后,会发现在python的Scripts文件夹下生成了三个文件

然后在cmd中,切换到Scripts路径下,输入 python cxfreeze-postinstall,会发现Scripts文件夹下又多了.bat文件,此时已经安装成功

继续在cmd下尝试输入 cxfeeeze -h 验证下,显示成功。 提示:直接通过 pip install cx-freeze 安装,仍然出现错误时(找不到文件),最好去官网:网址手动下载相应版本的cx-freeze文件,放在Scripts文件夹下,手动双击安装,然后再运行cxfreeze-postinstall。(例如:我的python版本是3.4.3,下载cx_Freeze-4.3.3.win-amd64-py3.4的文件。注意,版本不对无法安装!)

在cxfreeze的安装目录下即\\Python34\\Scripts,添加一个文件cxfreeze.bat(可用记事本)cxfreeze.bat内容如下:

@ echo off

C:\\Python34\\python.exe C:\\Python34\\Scripts\\cxfreeze %* 1 2

在该目录下输入czfreeze -h也可以查看安装情况(用pip install cxfreeze就可直接安装改第三方库)

打包方法

Python打包exe文件方法汇总【4种】

Python打包exe文件方法汇总Python作为解释型语言,发布即公开源码,虽然是提倡开源但是有些时候就是忍不住想打包成exe,不仅仅是为了对代码进行加密,而是为了跨平台。防止有些没有安装py环境的电脑无法运行软件。目录对python代码打包成exe的方式有4种,py2exe,pyinstaller,cx_Freeze,nuitka,分别对以上4种方法介绍,欢迎纠错和提供新
推荐度:
点击下载文档文档为doc格式
9fafy6auhh23x6i11fyp2nsft0iuth00r6y
领取福利

微信扫码领取福利

微信扫码分享