网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

Python是一种高级编程语言,它具有易学易用、跨平台等优点,因此在开发中得到了广泛的应用。然而,Python代码需要在Python解释器中运行,这对于一些用户来说可能不太方便。Python作为解释型语言,发布即公开源码,虽然是提倡开源但是有些时候就是忍不住想打包成exe,不仅仅是为了对代码进行加密,而是为了跨平台。防止有些没有安装py环境的电脑无法运行软件。

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

01

使用pyinstaller

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

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

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

02

使用cx_Freeze

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

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

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

03

使用py2exe

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

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

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

04

使用py2app

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

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

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

05

使用Nuitka

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

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

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

06

使用Nuitka+pyinstaller

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

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

nuitka --standalone your_script.py

pyinstaller your_script.spec

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

07

总结

本文介绍了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代码打包成独立的可执行文件,方便用户使用。

编辑|张毅

审核|吴新

爆料联系:cpcfan1874(微信)

壹零社:用图文、视频记录科技互联网新鲜事、电商生活、云计算、ICT领域、消费电子,商业故事。《中国知网》每周全文收录;中国科技报刊100强;2021年微博百万粉丝俱乐部成员;2022年抖音优质科技内容创作者

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
秦海璐变卖房产,清空全部资产,凑出近亿身家,绝境兜底救下刘涛

秦海璐变卖房产,清空全部资产,凑出近亿身家,绝境兜底救下刘涛

秋别离
2026-06-13 15:50:00
郑丽文发表声明!

郑丽文发表声明!

经点星娱
2026-06-22 10:24:02
人到晚年,一定要在还能走动时,把这五件事办了,一旦卧床就晚了

人到晚年,一定要在还能走动时,把这五件事办了,一旦卧床就晚了

王二哥老搞笑
2026-06-21 09:50:17
原来洗钱这件事一直都贴近生活!网友:手段变化多端,长见识了

原来洗钱这件事一直都贴近生活!网友:手段变化多端,长见识了

另子维爱读史
2026-05-27 07:52:25
【2026.6.22】扒酱料不停:那些你不知道的八卦一二三

【2026.6.22】扒酱料不停:那些你不知道的八卦一二三

娱乐真爆姐
2026-06-23 02:10:07
失言道歉!梁文杰买1千支凤梨释迦冰谢罪

失言道歉!梁文杰买1千支凤梨释迦冰谢罪

新时光点滴
2026-06-23 06:12:51
梅西不如我。

梅西不如我。

人生飞机稿
2026-06-23 07:57:23
胡锡进:日本真没什么好玩的,大家干嘛要去日本旅游呢?

胡锡进:日本真没什么好玩的,大家干嘛要去日本旅游呢?

映射生活的身影
2026-06-21 19:30:48
没想到!马宁世界杯主哨首秀仅1天,竟在海外实现口碑逆转

没想到!马宁世界杯主哨首秀仅1天,竟在海外实现口碑逆转

法老不说教
2026-06-22 17:43:44
马科斯万万没想到,各国的援助还在路上,中国的制裁已先一步到位

马科斯万万没想到,各国的援助还在路上,中国的制裁已先一步到位

不甜的李子
2026-06-23 07:10:55
罗永浩曾痛批iPhone设计属于二流 苹果新CEO调转方向:将设计视为第一优先级

罗永浩曾痛批iPhone设计属于二流 苹果新CEO调转方向:将设计视为第一优先级

快科技
2026-06-22 23:04:05
天文学家震撼发现:宇宙中约94%的星系,已经永远无法到达

天文学家震撼发现:宇宙中约94%的星系,已经永远无法到达

混沌录
2026-06-22 18:00:16
让步,“必须的”

让步,“必须的”

中国新闻周刊
2026-06-22 19:04:02
少林寺新方丈释印乐,上任才10个月,少林寺被曝一下少了800多万

少林寺新方丈释印乐,上任才10个月,少林寺被曝一下少了800多万

许三岁
2026-06-14 09:57:24
元朝时期中国算不算亡国?为什么元朝皇帝始终自认是中国的皇帝

元朝时期中国算不算亡国?为什么元朝皇帝始终自认是中国的皇帝

磊子讲史
2026-06-22 15:38:49
民调:内塔尼亚胡支持率大跌

民调:内塔尼亚胡支持率大跌

环球时报国际
2026-06-23 09:19:56
武磊解说世界杯比赛被黄健翔盛赞,此前已经有前国脚解说翻车

武磊解说世界杯比赛被黄健翔盛赞,此前已经有前国脚解说翻车

姜大叔侃球
2026-06-22 10:41:02
TVB前花旦参加《乘风2026》 后返港!感激老公照顾三个儿!称内地综艺没TVB辛苦

TVB前花旦参加《乘风2026》 后返港!感激老公照顾三个儿!称内地综艺没TVB辛苦

我爱追港剧
2026-06-23 01:23:50
二十余年遗憾终圆满!陈伟霆首个父亲节,一双定制亲子鞋戳哭全网

二十余年遗憾终圆满!陈伟霆首个父亲节,一双定制亲子鞋戳哭全网

繁华羽淡洛
2026-06-21 16:05:36
善恶终有报!官方出手、怒斥朱军,移居国外的弦子终尝到了回旋镖

善恶终有报!官方出手、怒斥朱军,移居国外的弦子终尝到了回旋镖

君笙的拂兮
2026-06-04 08:30:47
2026-06-23 09:52:49
电脑报少年派 incentive-icons
电脑报少年派
最新鲜的互联网产业资讯
3943文章数 1607关注度
往期回顾 全部

科技要闻

SpaceX、谷歌重挫,市值蒸发超5000亿美元

头条要闻

山东一中学门口车祸致11死13伤 27名公职人员被处分

头条要闻

山东一中学门口车祸致11死13伤 27名公职人员被处分

体育要闻

法国球星祝中国队下届世界杯取得好成绩

娱乐要闻

陪睡陪玩是皮毛,向佐揭内娱暗规则

财经要闻

智谱万亿市值,国产Anthropic真来了?

汽车要闻

华为智驾ADS限时优惠月底结束 7月1日前下订立省3000元

态度原创

本地
旅游
亲子
数码
公开课

本地新闻

吃一次广东龙舟饭,才懂什么是豪华盛宴

旅游要闻

右江区推出端午三日精品旅游线路

亲子要闻

腭裂首次面诊时间最好是3-5个月

数码要闻

Counterpoint报告:2026Q1全球智能手表出货量苹果华为小米前三

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版