怎么把写好的python代码打包成exe-【Python之点到为止】如何优雅的将你的代码打包成EXE...
此.py非彼PY
打包发布
本文旨在Windows环境下打包发布.
部分模块支持跨平台打包, 可以参考对应文档.
仅介绍我在使用Python中经常用到的三款工具
像PyInstaller、py2exe、py2app (mac)原理都差不多
cx_Freeze虽然与上面三个也类似, 但是知道的人不多
而今天的重点就是Nuitka
还有, 既然已经要考虑打包了
那么基础部分安装模块这类就不细说了
PyInstaller
pip install PyInstaller
方便
简单
对于PyInstaller给我的感觉就是这两个优点
不用多考虑一个命令就将所有能用到的东西都打包了
pyinstaller -F demo.py
关于参数:
-F : 单文件打包, 这种其实是不推荐的. 原理就是个自解压
-D : 这个是默认选项, 会将依赖放到指定目录中
-i : 给生成的exe换个图标
更多的参数, 比如说你想指定那些模块打包哪些不打包
以及在Windows下面用不用UAC, 就是管理员运行
用不用UPX等等, 都只是一个参数的问题
剩下的就都交给他帮你搞定.
对于这个工具来说, 网上的教程相当多
基本上搜python打包全是它
所以这里不赘述, 文档就算没有中文 浏览器翻译也能看懂
cx_Freeze
pip install cx-Freeze
这款工具来说对标PyInstaller
最大的特点就是可以编写一个打包脚本
需要打包的时候只需要python执行一下
比如说编写一个 setup.py
import sys
from cx_Freeze import setup, Executable
# 虽说ex_Freeze可以自动检测你使用了那些模块, 但是有些情况你可能需要微调一下
# 比如A模块调用了B模块 B模块又调用了C模块.ABC都是第三方模块, 很可能BC就没办法打包
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
# base就是设置是否是控制台程序, 如果你用pyqt这种GUI库编写的就可以隐藏控制台.
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo", # 程序名
version = "0.1", # 版本号
description = "My GUI application!", # 程序介绍
options = {"build_exe": build_exe_options}, # 打包参数
executables = [Executable("guifoo.py", base=base)]) # 打包的模块
然后就可以放心的编写你的 工具脚本
在想打包的时候运行一下
python setup.py build
是不是很方便, 但是cx_Freeze无法打包为单文件程序
但是可以打包成安装程序, 就是安装包
Nuitka
本文的重点来了.
介绍的前两款工具都是, 将py文件 编译成 pyc(python字节码)
其中pyinstaller可以加密这些字节码
但是pyc文件很容易反编译成.py脚本文件
然后将运行环境压缩在一起.
Nuitka就不一样了.
官方说明(机翻):
Nuitka 是用 Python 编写的 Python 编译器。
它与 Python 2.6、2.7、3.3、3.4、3.5、3.6 和 3.7 完全兼容。
你喂它你的Python应用程序,它做很多聪明的事情,并吐出一个可执行或扩展模块。
简单来说Nuitka可以直接将你的程序编译成exe.
先把py转成c, 然后c再编译.
这样在想看见源码几乎不可能了.
虽然可以反汇编, 但已经让一些新手拒之门外了.
安装
pip install Nuitka
配置环境
需要安装编译器:
MSVC, 微软的VC编译器
MinGW, 可以再GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时库.
这两款编译器任选其一就行
实测下来MSVC打包后会带有一些额外的DLL
所以我最终选择的是MinGW.
MSVC就需要安装 Visual Studio 2017版本以上
MinGW需要安装5.1以上, 或者使用特殊参数支持4.4
MinGW在线安装: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe
这东西安装配置环境就不多说了.挺无脑的
但是在线安装国内应该很慢, 自己想想办法= =
编译打包
python -m nuitka --standalone some.py
如果环境都配置正确那么 执行完毕
目录下就会有一个 some.dist, 里面有一个some.exe
还有其他的一些dll 和 pyd文件.
PYD文件就是dll文件, 只不过经过特殊处理可以在python中直接调用
文件夹里面其实有很多没用的包, 可以选择性删除.
因为上述命令执行时间可能很长
不要以为它卡了, 你可以增加两个参数 --show-progress --show-scons
python -m nuitka --standalone --show-progress --show-scons some.py
让他显示一下进度
它还可以打包模块、还可以打包整个包
更多的等待你发现
官方文档: https://www.nuitka.net/doc/user-manual.html
总结
选择自己合适的打包方式
不要为了追求原生exe或者文件大小而去使用Nuitka
想要减少打包后的大小还是有很多方法的
比如说使用官网提供的嵌入式环境
减少使用第三方包等等
像编译这种打包方式还是挺折腾的
然而你要真的决定在项目中使用他了
那就需要按照文档取考虑做优化了.
毕竟py转到C, 目前还不能说太完美的.
那么我就点到为止了.
PS: 带你入门, 自己发掘. 这不就是编程的快乐么?
哦还有, 虽然叫点到为止
但是你们使用中遇到的问题可以在下方评论
会尽力帮你解决. By: Virace
怎么把写好的python代码打包成exe-【Python之点到为止】如何优雅的将你的代码打包成EXE...相关推荐
- 如何打包你的 Python 代码
你花了几周的时间来完善你的代码.你已经对它进行了测试,并把它发送给一些亲近的开发者朋友以保证质量.你已经将所有的源代码发布在 你的个人 Git 服务器 上,并且从一些勇敢的早期使用者收到了一些有用的错 ...
- 代写python代码一般多少钱_代写CO 353课程作业、代做Python程序设计作业、代写Python语言作业...
代写CO 353课程作业.代做Python程序设计作业.代写Python语言作业 日期:2020-03-17 11:22 CO 353 - Homework assignment 4 Winter ' ...
- python面试代码题_常见python面试题-手写代码系列
原博文 2019-08-13 13:50 − 1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reversetempList = [1,2,3,4]tempList.reverse()f ...
- python在哪里写代码-在哪里编写python代码
Python常用的编辑器有vim,Eclipse with PyDev,Sublime Text,Emacs, PyCharm, Wing,PyScripter,The Eric Python IDE ...
- python 第三方包自动导入_7行代码,彻底告别python第三方包import导入问题!
最近有不少小伙伴咨询关于pyton第三方包导入的问题,今天我们就来聊聊第三方包导入那些事. 随着对python学习的渐入臻境,越来越多的小伙伴们开始导入自己所需的第三方包,实现各种各样的功能.但是,他 ...
- python简单程序代码-有那些用python修改python程序代码的简单方法?
python源代码是用C写的. 想改源库用python实现好像不太现实. 按你的要求,用C来extend的话很简单. ============下面是扩展库的代码=========== 用C来exten ...
- python写出的程序如何给别人使用-python如何写出表白程序
用python编表白程序的方法: 1.创建GUI窗口,实现代码的调用. 2.编写点击触发函数,实现表白程序. 具体代码如下:from tkinter import * from tkinter imp ...
- rust相框加载图片代码_Rust 能取代 Python,更好的实现神经网络?
Rust 也能实现神经网络? 作者 | Nathan J. Goldbaum译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)以下为译文:我在前一篇帖子(http://neur ...
- python第三方库文件传输_本地 Python 代码上传到 Python 第三方库(Pypi)
程序员对于编程都有自己的"套路",好的套路都会得到复用和 IT 界的传播.这时有一个疑问,怎样来实现呢?小编这里就准备介绍如何将自己写的 Python 包上传到 Python 官网 ...
最新文章
- Python+Selenium自动化
- shell里面的参数
- 2.1.2监测当前打印机状态
- Spring4新特性——核心容器的其他改进
- spark发行版笔记9
- 四十、Scrapyd的安装及使用
- 【已解决】Exception in thread “main“ java.lang.NullPointerException
- linux shell 高级编程,shell高级编程
- java file.length 单位_Java.io.File.length()返回0
- 用标准C语言初始化线性表,跪求:线性表初始化函数的详细解释(c语言)
- 20200724:力扣197周周赛上
- SAP 电商云 Spartacus UI Cart 页面的 CMS 布局
- 32位java8,jdk8下载,解压版
- 华为云主机被植入挖矿,主机变肉鸡破解实录。
- 《嵌入式 – GD32开发实战指南》第9章 呼吸灯
- 服务器开机显示检查电缆,电脑开机显示无VGA电缆是怎么回事,求答!
- 视觉十四讲:第九讲_BA优化_g2o
- html5适应手机比例,HTML5 如何让手机网站自适应设备屏幕宽度
- Kutools for Excel 结合 300 多种高级功能和工具
- 各大浏览器清除缓存的快捷键