py文件打包成exe文件的方式一共有三种:py2exe、PyInstaller和cx_Freeze

本文分四个步骤来详讲如何用PyInstaller将py文件打包成exe文件

1. PyInstaller 简介
2. PyInstaller 安装
3. 将py文件打包成exe文件
4. PyInstaller打包常见问题

一. PyInstaller简介

1.python相关文件介绍

python作为一门解释型脚本语言,它有三种发布方式:
.py文件 : 源码文件,运行需要使用者安装Python环境并且安装依赖的各种库
.pyc文件:pyc文件是Python解释器可以识别的二进制码,可跨平台的,需要使用者安装相应版本的Python和依赖库。
可执行文件:不需要安装python环境和依赖库,可针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,...)

2.PyInstaller的原理简介

1. PyInstaller工具可以把python解析器和脚本打包成一个可执行的文件,并不是编译成真正的机器码,打包成一个可执行文件后运行效率可能会降低,好处就是在使用者的机器上可以不用安装python和你的脚本依赖的库。
2. 利用PyInstaller对指定的的脚本打包时,会先分析脚本所依赖的其他脚本,然后根据导包路径去查找,把所有相关的脚本收集起来,包括Python解析器,然后根据你的命令参数可分别生成文件夹,或者打包成一个可执行文件。
3. 无论是生成的文件夹里的可执行文件或者只打包成一个可执行文件都可以直接运行,前者需要把整个文件夹都给别人。

注意⚠️:PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。

二. PyInstaller的安装

这里建议安装python环境管理工具conda,做到不同的环境隔离

https://www.cnblogs.com/trotl/p/11863544.html

1. PyInstaller在windows下的安装

使用命令pip install PyInstaller即可
在windows下,pyinstaller需要PyWin32的支持。当用pip安装PyInstaller时未找到PyWin32,会自动安装pypiwin32

2. PyInstaller在mac,linux下的安装

pip install PyInstaller

三. PyInstaller打包

1. options参数说明

通用参数

与生成结果有关参数

Windows和Mac特有的参数

2. 基本语法:

PyInstaller -F -w -i  xxx.ico dev.py --hidden-import=pandas._libs.tslibs.timedeltas

常用参数:

-F 指只生成一个exe文件,不生成其他dll文件

-w 不弹出交互窗口,如果你想程序运行的时候,与程序进行交互,则不加该参数

-i 设定程序图标 ,其后面的xxx.ico文件就是程序小图标

dev.py 要打包的程序,如果你不是在dev.py同一级目录下执行的打包命令,这里得写上dev.py的路径地址

–hidden-import=pandas._libs.tslibs.timedeltas 隐藏相关模块的引用

注意⚠️:你在哪个目录下执行的命令,默认打包完成的文件或者文件夹就在该目录

四. PyInstaller打包常见问题

⚠️避坑点(打包之前请先看看):

1. 路径最好为英文,没有中文字符;
2. 脚本名称里没有特殊字符
3. 使用utf-8编码
4. 图标文件必须是正常格式,为.ico文件
5. 命令使用pyinstaller和pyinstaller.exe结果都是一样的
6. 参数的添加得在pyinstaller和dev.py文件中间,不能随意位置添加
7. 如果你打包的代码中用到了静态文件,如图片和资源文件,需手动复制到文件夹中,否则exe文件会报找不到文件的错
8. 代码里导包最好使用from的方式,可节省打包后的文件大小
9. 就是当你使用错误的参数去打包或者打包到一半中断,等等此类运行到一半没了的情况。会导致你原来的py文件变成一个0KB的空文件。里面的代码会全部消失!!!所以以后需要有个良好的习惯,就是复制一份代码出来,用这个副本进行打包。并且参数出错,或者打错了导致失败时,检查下副本文件的py文件是否还存在再继续重新打包,不然打出来的就是空的文件,自然一直闪退,因为压根没内容(这点我没遇到过,来自别人的提醒)
10. pygame代码调试的时候要在结束时加quit()不然程序会崩溃
11. py文件运行没问题,不代表你打包后的文件运行就没问题,所以在打包好文件,打算运行exe文件测试时一定要录屏,因为报错会一闪而逝然后程序关闭,不仔细看的话,发现不了还报错,只会认为程序一运行就闪退,会让人不明所以,都不知道为什么,只有清楚报的什么错才好去解决,所以,一定要录屏!!!!
12. 如果在py文件中用到了多进程,且你在Windows下编译需要加一行代码在开头,multiprocessing.freeze_support()
13. 打包的时候要进入到能运行这个py文件的虚拟环境中,不能在别的环境中对py文件打包,不然打包的结果还是你原来的环境,可能打包文件过大,或者引起缺失包等其他问题
14. 如果有打包错误,具体看build里的warn***.txt文档,里面详细记载了错误的原因。一般都是库丢失

⚠️Bug:

1. “IndexError: tuple index out of range”

错误分析:这个问题是当前的pyinstaller版本不支持python的版本
解决办法:修改pyinstaller的版本,pip install pyinstaller==适合你的版本

**2. ImportError: C extension: No module named‘pandas._libs.tslibs.timedeltas’ **

错误分析:因为我的代码中引用了pandas库,然后使用pyinstaller打包的时候显示模块缺失
解决办法:
1. 忽略此模块(打包时加上–hidden-import=pandas._libs.tslibs.timedeltas)
2. 添加文件
在你的python3的安装路径下找到PyInstaller/hooks的位置
如C:\Python36\Lib\site-packages\PyInstaller\hooks
新建文件hook-pandas.py,并填写以下内容:
hiddenimports=[
#all your previous hidden imports
'pandas', 'pandas._libs.tslibs.timedeltas'
]

pyinstaller打包python文件成exe(原理.安装.问题)的更多相关文章

  1. PyInstaller 打包 python程序成exe

    pychaim下PyInstaller 打包 python程序 主题是使用PyInstaller 打包python时遇到一些问题以及解决方案,其中将要打包的程序是用tensorflow做的LSTM算法 ...

  2. 【Python】 如何用pyinstaller打包python程序成exe

    [pyinstaller] pyinstaller在他们的官方网站上下载:http://www.pyinstaller.org/ 下载完pyinstaller之后还要安装一个支持包pywin32. 这 ...

  3. pyinstaller打包py文件成exe文件时,出现ImportError: No module named 'pefile'错误解决办法!

    首先pyinstaller的安装与使用详见如下链接: 安装完成之后,命令行中输入pyinstaller之后,结果如下: ImportError: No module named 'pefile' 缺少 ...

  4. “failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误

    在使用PyInstaller打包python程序,打包命令为: pyinstaller -F -w -i manage.ico yourpyfile.py 顺便说一下几个参数的作用 -F:是直接生成单 ...

  5. 打包python文件为exe文件(PyInstaller工具使用方法)

    最近做的新浪微博爬虫程序,打算打包成.exe软件以方便使用,网上找到一个很好的打包工具pyinstaller,这里记录一下打包的方法. 一.下载pyinstaller 我使用的版本为PyInstall ...

  6. 利用pyinstaller 打包Python文件

    1.下载安装pyinstaller模块 cmd 命令: pip install pyinstaller cmd命令: pip list 查看自己安装的模块 2.建议把要大包的Python文件单独放到新 ...

  7. pyinstaller打包django项目成exe以及遇到的一些问题

    1. 环境 环境为:win7 + Python3.6 + Django (2.1.10) + PyInstaller (3.5) 注意: 这里的PyInstaller,笔者是直接使用pip安装,中间会 ...

  8. 打包Python文件为exe

    pip install pyinstaller 然后就在终端里执行命令 cd 到目标文件的目录下 执行 pyinstaller  -F  ***.py 即可生成exe

  9. PyInstaller打包Python脚本为exe

    1.PyInstaller-3.1.1  百度云链接  http://pan.baidu.com/s/1jHYWin8 密码  oapl 2.安装最新版本的 pywin32-217.win32-py2 ...

随机推荐

  1. 4. SOFAJRaft源码分析— RheaKV初始化做了什么?

    前言 由于RheaKV要讲起来篇幅比较长,所以这里分成几个章节来讲,这一章讲一讲RheaKV初始化做了什么? 我们先来给个例子,我们从例子来讲: public static void main(fin ...

  2. OracleService服务不见了|OracleServiceXE服务没有了

    服务里面本来应该有OracleService的(或者是Express版的OracleServiceXE),而服务列表没有此服务项,而启动数据库时出现: TNS监听程序当前无法识别连接描述符中请求的服务 ...

  3. 设计模式(十四)Chain of Responsibility模式

    Chain of Responsibility模式就是当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任.也就是说,当一个人被要求做什么事时,如果他可以做就自己做, ...

  4. 机器学习 AI 谷歌ML Kit 与苹果Core ML

    概述 移动端所说的AI,通常是指"机器学习". 定义:机器学习其实就是研究计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身.从实践的意义 ...

  5. Java面试官最爱问的volatile关键字

    在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用 ...

  6. linux lsof 查看进程打开那些文件 或者 查看文件给那个进程使用

    lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系统的文件,4.字符设备文件  5.(函数)共享库  6.管道,命名管道 7.符号链 ...

  7. Cocos引擎现身 IndiePrize 全球游戏开发者大会!Cocos的两大男神成为压轴嘉宾

    2019全球游戏开发者大会今天11月10日,在深圳南山海上世界文化艺术中心拉开帷幕.除了号称精品游戏"奥斯卡"的IndiePrize将在现场展开最终角逐,更有来自美国.俄罗斯.澳大 ...

  8. windows 利用环境变量%PATH%中目录可写提权

    使用PowerUp的时候有时候会有这种结果 [*] Checking %PATH% for potentially hijackable DLL locations... Permissions : ...

  9. python 爬取猫眼电影top100数据

    最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...

  10. 【vue】在VS Code中调试Jest单元测试

    在VS Code中调试Jest单元测试 添加调试任务 打开 vscode launch.json 文件,在 configurations 内加入下面代码 "configurations&qu ...