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

六种打包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.

相关推荐
热点推荐
葡萄牙2-1克罗地亚:赛后评分:不是C罗第一,葡萄牙9号排第一

葡萄牙2-1克罗地亚:赛后评分:不是C罗第一,葡萄牙9号排第一

侧身凌空斩
2026-07-03 09:10:27
被淘汰仅2天,65岁德国足球传奇下场炮轰,失败主要是因为女人?

被淘汰仅2天,65岁德国足球传奇下场炮轰,失败主要是因为女人?

青梅侃史啊
2026-07-03 09:48:36
越来越多年轻人主动“断根绝后”:普通家庭,正在消失

越来越多年轻人主动“断根绝后”:普通家庭,正在消失

舒山有鹿
2026-07-03 11:05:24
萨提亚:你的孩子不会记得你为他熬过多少深夜,操过多少心思,但是他永远能记住,他迷茫或者无助时,你的两种回应

萨提亚:你的孩子不会记得你为他熬过多少深夜,操过多少心思,但是他永远能记住,他迷茫或者无助时,你的两种回应

心理观察局
2026-07-03 07:19:06
“摸奶子”再惹争议,OPPO的流量反噬开始了

“摸奶子”再惹争议,OPPO的流量反噬开始了

品牌头版
2026-05-13 10:18:15
美国大满贯:国乒男单团灭!背水一战心态崩盘,林诗栋0-3A勒布伦

美国大满贯:国乒男单团灭!背水一战心态崩盘,林诗栋0-3A勒布伦

钉钉陌上花开
2026-07-03 11:38:11
FBI实锤:南希·格思里绑架案赎金信全系伪造

FBI实锤:南希·格思里绑架案赎金信全系伪造

影视情报室
2026-07-02 00:02:41
欣旺达制造!iPhone 18 Pro Max电池偷跑:5187mAh 苹果史上最大容量

欣旺达制造!iPhone 18 Pro Max电池偷跑:5187mAh 苹果史上最大容量

快科技
2026-07-03 09:13:34
斯大林拿到长津湖战报,态度急变:马上交给中国同志36个师的装备

斯大林拿到长津湖战报,态度急变:马上交给中国同志36个师的装备

云霄纪史观
2026-07-02 02:31:55
仅230万年薪!湖人后卫线上最后一位领防人,终于能跟詹姆斯离开

仅230万年薪!湖人后卫线上最后一位领防人,终于能跟詹姆斯离开

老梁体育漫谈
2026-07-03 01:36:40
太现实!4700万粉户外一姐唐艺,说凉就凉了,网红这碗饭真没想象中好干

太现实!4700万粉户外一姐唐艺,说凉就凉了,网红这碗饭真没想象中好干

可乐谈情感
2026-07-03 11:41:55
退休人员注意!2026年养老金的调整通知公布了吗?要注意这几方面

退休人员注意!2026年养老金的调整通知公布了吗?要注意这几方面

社保小达人
2026-07-03 11:10:33
精神小妹的生活原来是这样的!网友:终于知道她们为啥都这么瘦了

精神小妹的生活原来是这样的!网友:终于知道她们为啥都这么瘦了

深度报
2026-02-11 23:35:03
祁宏近况:定居上海做青训,50岁锋芒褪去,妻子不离不弃等他5年

祁宏近况:定居上海做青训,50岁锋芒褪去,妻子不离不弃等他5年

胡一舸南游y
2026-06-25 23:22:44
文在寅重回青瓦台,李在明全程都毕恭毕敬,希望能够给他指点迷津

文在寅重回青瓦台,李在明全程都毕恭毕敬,希望能够给他指点迷津

墨兰史书
2026-07-02 21:00:04
朝鲜停战前夜,毛主席发现致命漏洞,急调24万奇兵入朝一举定乾坤

朝鲜停战前夜,毛主席发现致命漏洞,急调24万奇兵入朝一举定乾坤

芊芊子吟
2026-07-02 12:25:06
北大数学天才柳智宇,放弃麻省奖学金当和尚,还俗后与女修者结婚

北大数学天才柳智宇,放弃麻省奖学金当和尚,还俗后与女修者结婚

从零到一研究所
2026-06-26 16:48:03
张雪称近日遭人跟踪,绕路才摆脱,此前已多次发生翻墙进厂、强行拦车、直接拉车门等事件,直呼:真的没有必要这样!有商务需求通过正规渠道对接

张雪称近日遭人跟踪,绕路才摆脱,此前已多次发生翻墙进厂、强行拦车、直接拉车门等事件,直呼:真的没有必要这样!有商务需求通过正规渠道对接

每日经济新闻
2026-07-02 20:13:07
超越姆巴佩,亚马尔是国家队大赛收获10胜最年轻的欧洲球员

超越姆巴佩,亚马尔是国家队大赛收获10胜最年轻的欧洲球员

懂球帝
2026-07-03 05:46:04
泰山景区有无权限建立刀片隔离网?兼谈我国景区管理的一些体制性缺陷

泰山景区有无权限建立刀片隔离网?兼谈我国景区管理的一些体制性缺陷

阜成门六号院
2026-07-01 22:56:12
2026-07-03 12:24:49
电脑报少年派 incentive-icons
电脑报少年派
最新鲜的互联网产业资讯
3947文章数 1608关注度
往期回顾 全部

科技要闻

特斯拉交付超预期7.4万辆,股价却大跌7.5%

头条要闻

牛弹琴:印度哥哥迎来日本小妹妹 这场外交好戏不简单

头条要闻

牛弹琴:印度哥哥迎来日本小妹妹 这场外交好戏不简单

体育要闻

韩国人,为什么恨透了洪明甫?

娱乐要闻

黄晓明深夜约会美女,分手原因曝光

财经要闻

AI“鬼故事”不断,市场开始重估?

汽车要闻

极氪9X五座版官宣,如图!

态度原创

房产
家居
游戏
本地
公开课

房产要闻

独家猛料!融创海南大变天,项目重启,大量招人!

家居要闻

传奇筑 日常诗

《AC黑旗RE》解锁时间公布!中文配音 主机比PC先玩

本地新闻

这场穿越酉阳的光影之旅,张张都是壁纸!

公开课

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

无障碍浏览 进入关怀版