写了个吊炸天的Python项目,把我和左手相处的时间都赔上了。但出于版权考虑,我不太想让使用方直接用我的代码,毕竟Python代码给出去,就真的收不回来了。学习Python中有不明白推荐加入交流群

号:960410445

群里有志同道合的小伙伴,互帮互助,

群里有不错的视频学习教程和PDF!

想给客户演示的时候,不想那么墨迹的打开dos cmd 或者 terminal ,然后运行python app.py 这样的命令行。最好是客户双击,完事儿。就像有人在那自己动一样……

PyInstaller 来了,他就是这么一款帮助我们把整个项目完整打包的工具。目前已经兼容Py3.7,以及 Mac App 和 Windows Exe。

文档:

先说下,这篇文章有别于网上那坨安装、打包的草包,这次是真核!

1. 安装 这个很简单,直接pip install pyinstaller 就好。

⚠️注意了:你要编译成exe,建议你省心点的在windows上用pyinstaller,如果你要mac app的,那就用mac编译。

我今天就以windows为例

2. 简单使用

这个也很简单,网上一抓一大把,我这里就不赘述了,无非就是那么几个命令:

pyinstaller -F 项目主文件(或者是单一脚本)

3. 参数说明

-F,打包所有的依赖包在一个exe中,包括你自己的模块、内置模块以及第三方模块。

-c,如果你是命令行窗口,就要加上这个参数。

-w,窗口程序,比如你用了PyQt。

4. 高级用法:配置文件

.spec,这个文件非常重要,我们可以通过编辑这个文件来打包我们的项目,类似DockerFile。

我给大家贴一个我的:

-- mode: python --

block_cipher = None

a = Analysis(['C:\app\main.py'],

pathex=['C:\'],

binaries=[],

datas=[

('C:\data\input\builtin\.xlsx', '.\data\input\builtin\'),

('C:\data\input\.xlsx', '.\data\input\'),

('C:\data\output\', '.\data\output\'),

('C:\log\', '.\log\'),

('C:\app\db\', '.\app\db\')

],

hiddenimports=['numpy', 'pandas'],

...

)

pyz = PYZ(a.pure, a.zipped_data,

cipher=block_cipher)

exe = EXE(pyz,

...

)

这其实就是一个python文件,只不过后缀是spec罢了。

.spec一共会有4个对象,分别是:Analysis、PYZ、EXE、COLLECT。

Analysis用处最多,一个个解释:

第一个参数,是指定我们整个项目的主程序,也就是我们的入口文件。

pathex,就是我们的工作目录

datas,存放我们的数据。

好了,说到这里就要好好说一说这个Pyinstaller的工作流程了。当我们双击编译好的exe后,他是会创建一个临时目录,把所有需要用的包都解压到那里,然后执行。执行完毕后,临时文件夹就消失了。

这和我们有什么关系呢?想一下,如果你的项目中需要去读取某些文件,甚至是用户的输入参数,怎么办?打包出来的exe 是没有办法通过直接指定参数,类似:python main.py --input=*.xlsx 来读取文件的,因为我之前说了,在执行的时候会把项目解压到一个临时目录,所以原来项目中写好的相对路径也不管用。

为此,我们需要把host上的实际文件给copy到那个临时目录下,所以这个datas的作用就是这个,我的文件中,我把host下的 C:\data\input\builtin\*.xlsx文件都copy到临时目录的 data\input\builtin 下面。

hiddenimports ,继续说下去,PyInstaller有时候无法侦察到全部的依赖包,怎么办?我们可以在这个后面加,把PyInstaller编译出来的exe在运行的时候报的缺少模块给写里面。

⚠️注意了: pandas 和 numpy 有个很奇怪的地方,就是引用了 pandas 的地方,如果没有引用 numpy ,就会报错。所以你可以在主入口上面加一个 import numpy 。

⚠️注意了:直接 import numpy 还是会报错。怎么办?在 import numpy 下面加import numpy.core._dtype_ctypes

5. 临时目录

那刚刚说的临时目录在代码里怎么处理呢,如果代码中还是老样子处理相对路径,一定是找不到的。

官方文档中给出了这么一段:

Your app should run in a bundle exactly as it does when run from source. However, you may need to learn at run-time whether the app is running from source, or is “frozen” (bundled).

import sysif getattr( sys, 'frozen', False ) : # running in a bundle basedir = sys._MEIPASSelse : # running live

所以在你的项目中,如果有配置文件的话,就在那里加上这一段,然后在bundle中添加你的新路径,else还是你的老代码。

这个 sys._MEIPASS 是个特殊的值,是在Pyinstaller打包的时候才会添加的临时变量,通过这个变量我们可以获取到在执行exe时候的临时目录。

这对代码的改动是最小的。

6. 编译打包

最后,我们执行 python xxx.spec 就好了。打包的可执行文件会在dist里,build中是一些打包时候需要的文件。

输出中最后有 successfully 字样,就算成功了。他也会告诉你,exe出现在哪个位置。

image

当然不是说这样就万无一失了,别人也可以反编译你的exe,所以我们可以在打包的时候用Cython去编译一次,把混淆过的代码打包。这样的话难度就增加了,同时再加上mac地址绑定,这里就有多种思路了。下一次我给大家说说。

类似pyinstaller_全网首份Python打包工具Pyinstaller实战指南,如丝滑般体验相关推荐

  1. pythoninstaller打包_最详细的Python打包工具:Pyinstaller实战指南,如丝滑般体验!-installer文件夹...

    写了个吊炸天的Python项目,把我和左手相处的时间都赔上了.但出于版权考虑,我不太想让使用方直接用我的代码,毕竟Python代码给出去,就真的收不回来了. 想给客户演示的时候,不想那么墨迹的打开do ...

  2. Python 打包工具 pyinstaller

    介绍 官网 PyInstaller将 Python 应用程序及其所有依赖项捆绑到一个包中.用户无需安装 Python 解释器或任何模块即可运行打包的应用程序. PyInstaller支持 Python ...

  3. python打包工具 --- pyinstaller

    安装 安装python并添加到环境变量之后,在终端执行如下命令即可: pip install pyinstaller 截图如下: 若安装失败,可到: https://www.lfd.uci.edu/~ ...

  4. python 打包 .app 运行 控制台窗口_Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法...

    windows系统下安装Pyinstaller cmd下输入指令 pip install PyInstaller Pyinstaller的使用 进入需要打包的目录下,执行打包命令 Pyinstalle ...

  5. Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子

    Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子 目录 Python打包工具Pyintealler打包py文件为windows exe文件过程 ...

  6. 全网首份pyQt6飞机大战

    全网首份pyQt6飞机大战 该飞机大战具备较为完善的框架 可自动调整飞机与屏幕的位置 具备单点开火,半自动开火,全自动开火三种开火状态 每个作品作者花了不少头发,希望路过的大神多多留言点赞,对于不足的 ...

  7. python打包工具报错_Python打包发布神器—Pyinstaller

    一前言 在windows平台学习python的过程中,你肯定会遇到需要把.py脚本打包成.exe的情形,如此,至少有两方面的好处:第一,你的代码保密性更好,其他人不能直接看到python代码:第二,打 ...

  8. 自动化运维工具-Ansible实战指南

    Ansible实战 前言 一.Ansible简介 1.ansible是什么? 2.ansible特点 3.ansible架构 主要模块 工作流程 命令执行过程 二.Ansible 配置 1 安装ans ...

  9. xp精简工具_Windows10你也可以精简优化,丝滑般极爽轻松做到,再也不卡了

    Windows10大家也比较熟悉了,都在使用,有的喜欢有的厌恶,喜欢的肯定是非常熟练操作Windows10了,厌恶呢一般是不了解Windows10操作,不想去接触新生事物,Windows7都已经够用了 ...

最新文章

  1. Matlab调用Java类访问数据库
  2. Python入门100题 | 第028题
  3. 约束流–没有Drools规则语言的现代Java约束
  4. 《Java8实战》笔记(16):结论以及Java的未来
  5. 2019年春季学期第九周作业
  6. sublime-cssrem-安装与使用
  7. MySQL/MariaDB/Percona数据库升级脚本
  8. 制冷行业人人必备的设计与仿真软件大全!(附下载)
  9. lcms质谱仪_液相色谱-质谱联用(lcms)的原理及应用
  10. macOS Big Sur 11.7.1 (20G918) 正式版 ISO、PKG、DMG、IPSW 下载
  11. c语言 结束360进程,python修改注册表终止360进程实例
  12. 大学生免费查题公众号_大学生免费查题公众号?搜题免费公众号?
  13. FoodDelivered-Robot---送餐机器人(六)模块驱动代码---IO采集部分
  14. 深信服VMP 内存分配一点看法
  15. <img> 的 title 和 alt 属性的区别
  16. URL, URI, URN 和 IRI 表示的意思
  17. javaweb JAVA JSP校园二手交易平台源码jsp二手交易系统 闲置物品出售
  18. 牛客网-java练习
  19. 微信小程序登录及请求封装
  20. adb 命令 推文件_ADB放文件和取文件\adb push 、 adb pull

热门文章

  1. Python数据结构:栈的应用
  2. 罗姆将参加2022年慕尼黑电子展
  3. 中南大学计算机085403,多空位缺陷和硼氮杂质对锯齿型石墨烯纳米带电子结构-中南大学学报.PDF...
  4. OC基础学习 调用方式
  5. 世界银行专家:区块链可以重塑全球电子政务采购
  6. java实现银行存取款
  7. 计算机系为什么要学素描,学完古典素描为何还要学习现代素描?
  8. 各种经典布局--“T”型布局
  9. 从事云计算专业,需要了解的几个概念
  10. Mac下好用的日记、电子书阅读器、RSS订阅软件​