六种打包Python代码方法优缺点分析

Python是一种高级编程语言,它具有易学易用、跨平台等优点,因此在开发中得到了广泛的应用。然而,Python代码需要在Python解释器中运行,这对于一些用户来说可能不太方便。

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

因此,将Python代码打包成可执行文件(exe)是一种很好的解决方案。本文将分析几种打包方式的优缺点。

使用pyinstaller

pyinstaller是一个流行的Python打包工具,它可以将Python代码打包成独立的可执行文件。

使用pyinstaller打包Python代码非常简单,只需要在命令行中输入以下命令:pyinstaller your_script.py

这将生成一个可执行文件,可以在Windows、Linux和MacOS上运行。

使用cx_Freeze

cx_Freeze是另一个流行的Python打包工具,它可以将Python代码打包成独立的可执行文件。

使用cx_Freeze打包Python代码也很简单,只需要在命令行中输入以下命令:cxfreeze your_script.py --target-dir dist

这将生成一个可执行文件,可以在Windows、Linux和MacOS上运行。

使用py2exe

py2exe是一个Python打包工具,它可以将Python代码打包成Windows可执行文件。

使用py2exe打包Python代码也很简单,只需要在命令行中输入以下命令:python setup.py py2exe

这将生成一个Windows可执行文件。

使用py2app

py2app是一个Python打包工具,它可以将Python代码打包成MacOS可执行文件。

使用py2app打包Python代码也很简单,只需要在命令行中输入以下命令:python setup.py py2app

这将生成一个MacOS可执行文件。

使用Nuitka

Nuitka是一个Python编译器,它可以将Python代码编译成C++代码,然后将其打包成可执行文件。

使用Nuitka打包Python代码也很简单,只需要在命令行中输入以下命令:nuitka your_script.py

这将生成一个可执行文件,可以在Windows、Linux和MacOS上运行。

使用Nuitka+pyinstaller

Nuitka和pyinstaller可以结合使用,将Python代码编译成C++代码,然后使用pyinstaller将其打包成可执行文件。

使用Nuitka+pyinstaller打包Python代码也很简单,只需要在命令行中输入以下命令:

nuitka --standalone your_script.py

pyinstaller your_script.spec

这将生成一个可执行文件,可以在Windows、Linux和MacOS上运行。

总结

本文介绍了6种将Python代码打包成exe应用的方式,包括pyinstaller、cx_Freeze、py2exe、py2app、Nuitka和Nuitka+pyinstaller。每种方式都有其优点和缺点。比如pyinstaller,也是我最常用的。

优点:可将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

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

多进程打包的问题

官方的CPython存在一个GIL锁,这个锁的存在有很多优点,很多库都是线程安全的,单线程执行的效率也高。在python早期的一个版本中取消掉了GIL,代之以高粒度的锁来实现多线程,但是实际应用中单个线程的效率大大降低。故后来又将GIL这个锁还原回去,所以至今的python2也好还是python3中都会有这个锁。但是这个锁有很大一个问题,那就是效率问题,它导致了python仅仅只能利用一个core来进行数据的计算。所以后面为了弥补这个GIL带来的问题,专家们设计了multiprocessing库,gevent库等。

前一个是多进程库,为了解决python用于数据密集型处理的情况;后一个用于异步IO处理的情况,基本原理就是在CPU时钟之间来回切换,简单的例子就是爬虫程序爬取网页的时候。假如有10个url,我们都要去GET它,实际上网络之间的延迟是大大高于计算机内部的,那么这个时间内计算机就切换到下一个。有时候运用多进程是必须的,这个替代不了,哪怕它占用资源很多。

总之开发者可以根据自己的需求选择合适的方式。无论选择哪种方式,都可以将Python代码打包成独立的可执行文件,方便用户使用。

最后:

我准备了一些非常系统的Python资料,除了为你提供一条清晰、无痛的学习路径,我还甄选了最实用的学习资源以及庞大的主流爬虫案例库。短时间的学习,你就能够很好地掌握爬虫这个技能,获取你想得到的数据,需要的朋友可以扫描文末二维码即可获取

01 专为0基础设置,小白也能轻松学会

我们把Python的所有知识点,都穿插在了漫画里面。

在Python小课中,你可以通过漫画的方式学到知识点,难懂的专业知识瞬间变得有趣易懂。
在这里插入图片描述

在这里插入图片描述

你就像漫画的主人公一样,穿越在剧情中,通关过坎,不知不觉完成知识的学习。

02 无需自己下载安装包,提供详细安装教程

在这里插入图片描述

03 规划详细学习路线,提供学习视频

在这里插入图片描述

在这里插入图片描述

04 提供实战资料,更好巩固知识

在这里插入图片描述

05 提供面试资料以及副业资料,便于更好就业

在这里插入图片描述
在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要也可以扫描下方csdn官方二维码或者点击主页和文章下方的微信卡片获取领取方式,【保证100%免费】
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值