VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • #Python #日常技巧 #功能 将Python文件编译或打包成可执行(EXE)文件

目的:将Python文件编译为exe文件后,可以直接在Windows上运行,不需要再依赖Python环境,可以复制到其他电脑中直接使用,较为方便。

1.安装编译工具

       pyinstaller是Python中将py文件编译成为exe文件的免费工具,较为好用,在Windows中,pyinstaller依赖pywin32,所在如果打包有问题请先安装pywin32模块,在Windows命令提示符中安装命令如下:

来源于互联网的pyinstaller资料,仅供参考。https://so.csdn.net/so/search?q=pyinstaller&spm=1001.2101.3001.7020

                                                               Windows命令提示符


		
 
 
pip install pywin32
 
pip install pyinstaller

2. 编译命令

2.1 运行时出现dos命令窗口


		
 
 
pyinstaller -F 文件名.py

2.2 运行时不出现dos命令窗口

       在将带有tkinter等界面打包成exe时,运行exe文件的时候,会弹出一个DOS命令窗口,这个窗口可以看到一些打印信息,如果想只运行tkinter 页面,去掉dos命令窗口,需要在打包的时候 加上: -w


		
 
 
pyinstaller -F test.py -w

2.3 更多扩展命令


		
 
 
生成
 
-D, --onedir
 
创建一个包含可执行文件的单文件夹包(默认)
 
-F, --onefile
 
创建一个单一文件捆绑的可执行文件。
 
--specpath DIR
 
存放生成的spec文件的文件夹(默认:当前目录)
 
-n NAME, --name NAME
 
分配给捆绑的应用程序和规范文件的名称(默认值:第一个脚本的基本名称) [2]
 
Windows 和 Mac OS特定选项
 
-c, --console, --nowindowed
 
打开标准 i/o 的控制台窗口(默认)。在 Windows 上,如果第一个脚本是“.pyw”文件,则此选项无效。
 
-w, --windowed, --noconsole
 
Windows 和 Mac OS X:不为标准 i/o 提供控制台窗口。在 Mac OS 上,这也会触发构建 Mac OS .app 包。在 Windows 上,如果第一个脚本是“.pyw”文件,则会自动设置此选项。此选项在 UNIX 系统上被忽略。
 
-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or “NONE”>, --icon <FILE.ico or FILE.exe,ID or FILE.icns or Image or “NONE”>
 
FILE.ico:将图标应用于 Windows 可执行文件。
 
FILE.exe,ID:从exe中提取带有ID的图标。
 
FILE.icns:将图标应用到 Mac OS 上的 .app 包。如果输入的图像文件不是平台格式(Windows 上的 ico,Mac 上的 icns),PyInstaller 会尝试使用 Pillow 将图标转换为正确的格式(如果安装了 Pillow)。
 
使用“NONE”不应用任何图标,从而使操作系统显示一些默认值(默认值:应用 PyInstaller 的图标)
 
其他参数
 
-h, --help
 
显示此帮助信息并退出
 
-v, --version
 
显示程序版本信息并退出。
 
--distpath DIR
 
捆绑应用程序的放置位置(默认:./dist)
 
--workpath WORKPATH
 
将所有临时工作文件、.log.pyz 等放在哪里(默认:./build)
 
-y, --noconfirm
 
替换输出目录(默认:SPECPATH/dist/SPECNAME)而不要求确认
 
--upx-dir UPX_DIR
 
UPX 实用程序的路径(默认:搜索执行路径)
 
-a, --ascii
 
不包括 unicode 编码支持(默认:如果可用,包括在内)
 
--clean
 
在构建之前清理 PyInstaller 缓存并删除临时文件。
 
--log-level LEVEL
 
构建时控制台消息中的详细信息量。LEVEL 可以是 TRACE、DEBUG、INFO、WARN、ERROR、CRITICAL 之一(默认值:INFO)。

3. 编译后exe文件太大问题

3.1 可能遇到的问题

       很多时候,我们的Python脚本文件本身是很小的,才几十KB,但编译后达到几十MB甚至上百MB,主要原因是在编译时会把Python环境及库一起打包到exe文件中,如果我们的Python环境中安装了很多包,比如通过Anaconda安装的Python环境时,通过会安装了很多Python库,如果在此环境中进行编译,那么就会把所有的库带上,导致编译后的exe文件很大。

3.2 解决办法 

       为该文件单独创建相应的Python虚拟环境,只安装要编译Python文件所依赖的库(导入到该Python文件中的库),在该虚拟环境中安装pyinstaller编译工具(这点很重要),然后运行该虚拟环境,在虚拟环境下执行编译,这时文件就会小很多。        经测试十分有效,单独创建Python虚拟环境后编译,exe文件大小由原来的95MB减少到16MB,运行速度也快了10倍,原来界面加载出来要40~50秒,现在只要不到5秒。

3.3 Windows环境下虚拟环境创建方法

    安装virtualenv:


		
 
 
pip install virtualenv

   然后创建一个虚拟环境:


		
 
 
virtualenv py2exe_env # 命名请自定义

  创建完成以后,我们就会在创建的文件夹里发现虚拟环境命名的文件夹py2exe_env:

创建完成以后,我们就会在创建的文件夹里发现虚拟环境命名的文件夹py2exe_env

 然后cd 到虚拟环境py2exe_env的Script目录下,输入如下命令启动虚拟环境:


	
 
 
pyinstaller -F 文件名.py -w # 运行时不出现dos命令窗口

&或者:


	
 
 
pyinstaller -F 文件名.py # 运行时出现dos命令窗口

       这样就可以将Python代码文件编译成较小的exe文件!

4. 打包selenium脚本时集成chromedriver.exe的问题

       采用pyinstaller 打包selenium项目时,一般需要再同级目录中添加谷歌浏览器chromedriver.exe驱动,否则会报错。在转发给其他人使用时,还要附带一个驱动,就会很不方便。通过如下方法可以解决此问题。

4.1 在代码中添加chromedriver.exe的路径

        解决问题的关键,在代码中添加sys._MEIPASS路径,代码如下:


	
 
 
import sys
 
 
 
 
 
def getDriver():
 
if getattr(sys, 'frozen', False):
 
# 从exe包里找chromedriver依赖驱动的情况
 
chromedriver_path = os.path.join(sys._MEIPASS, "chromedriver.exe")
 
driver = webdriver.Chrome(chromedriver_path)
 
else:
 
# 普通情况下从本地文件路径找依赖的情况
 
driver = webdriver.Chrome(executable_path='本地chromedriver的路径') # 修改为自己电脑中chromedriver的路径
 
return driver
 
 
 
 
 
if __name__ == '__main__':
 
driver = getDriver()
 
driver.get('https://www.baidu.com')
 
#无论是本地调试还是打包成exe都不会再报错了。

       注意:用 pyinstaller 打包生成的 exe 文件,在运行时动态生成依赖文件,sys._MEIPASS就是这些依赖文件所在文件夹的路径,通常为 C:\Windows\Temp_MEIxxxx 或C:\Users\用户名\AppData\Local\Temp_MEIxxxx,仅在 exe运行时有效,IDE运行时报错,因此需要通过判定条件兼顾。

4.2 打包时把chromedriver.exe添加进去 

 

       用pyinstaller打包时,把chromedriver.exe添加进去,重新打包,然后就可以使用了,打包命令如下:


	
 
 
pyinstaller -F --add-binary "chromedriver.exe";"." 文件名.py # 把文件名换成你的文件名

      打包完成后:,sepc文件中会出现添加了chromedriver.exe驱动,如下图所示: 

您也可以参考以下资料:

https://www.jianshu.com/p/2c7c7dd602e2 https://www.zhihu.com/question/281858271 https://blog.csdn.net/wuchenlhy/article/details/81947159 https://blog.csdn.net/xiaofeixia666888/article/details/107258470/ https://blog.csdn.net/sinat_36797467/article/details/120288627?spm=1001.2014.3001.5501 https://blog.csdn.net/MAOZEXIJR/article/details/91971027

感谢您的阅读,如觉得有用请您点赞,您的鼓励是对我的最大动力!

  END

2022/11/27

 

联系我:pengyu717@yeah.net



相关教程