python使用pyinstaller打包exe文件遇到的问题

本文总结了使用pyinstaller打包Python程序时遇到的问题及解决方案,包括如何隐藏控制台、消除webdriver黑框、处理程序中执行cmd命令时的控制台依赖,以及去除不必要的库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

肯定不全。。。只是我遇到的问题,在此处做一个总结

一、基本使用

usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
                   [--add-data <SRC;DEST or SRC:DEST>]
                   [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
                   [--hidden-import MODULENAME]
                   [--collect-submodules MODULENAME]
                   [--collect-data MODULENAME] [--collect-binaries MODULENAME]
                   [--collect-all MODULENAME] [--copy-metadata PACKAGENAME]
                   [--additional-hooks-dir HOOKSPATH]
                   [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
                   [--key KEY] [-d {all,imports,bootloader,noarchive}] [-s]
                   [--noupx] [--upx-exclude FILE] [-c] [-w]
                   [-i <FILE.ico or FILE.exe,ID or FILE.icns or "NONE">]
                   [--version-file FILE] [-m <FILE or XML>] [-r RESOURCE]
                   [--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
                   [--win-no-prefer-redirects]
                   [--osx-bundle-identifier BUNDLE_IDENTIFIER]
                   [--runtime-tmpdir PATH] [--bootloader-ignore-signals]
                   [--distpath DIR] [--workpath WORKPATH] [-y]
                   [--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
                   scriptname [scriptname ...]

常用参数
	-D 	生成一个文件夹,里面有exe文件及其动态库		默认(运行速度较快)
	-F	打包后只生成单个exe格式文件
	
	-c	运行时带控制台	默认
	-w	运行时不使用控制台
	-i	FILE.ico  为exe文件创建图标

如打包test.py成一个exe文件。

pyinstaller -F test.py

不显示控制台
加上-w参数即可不显示控制台。

pyinstaller -F -w test.py

二、去除webdriver的黑框

如果使用selenium,在打包后webdriver运行时会有类似控制台的黑框出现。
去除方法。
修改Python\Python36\Lib\site-packages\selenium\webdriver\common 文件夹下的 service.py 文件。
Python\Python36\Lib\site-packages 替换为当前运行的python环境路径。

第77行添加 creationflags=134217728

            self.process = subprocess.Popen(cmd, env=self.env,
                                            close_fds=platform.system() != 'Windows',
                                            stdout=self.log_file,
                                            stderr=self.log_file,
                                            stdin=PIPE,
                                            creationflags=134217728)

三、程序中执行cmd等命令打包时-w不使用控制台无法运行

这个修改是建立在未使用控制台进行输入情况下的。如果使用控制台输入什么的。。。这方法可能无效。
重定向subprocess.popen的输入输出(默认都是控制台)。替换为subprocess属性。

            out, err = subprocess.Popen(cmd,
                                        shell=True,
                                        stdin=subprocess.PIPE,  # 需重定向标准输入。否则无法执行
                                        stdout=subprocess.PIPE,
                                        stderr=subprocess.PIPE).communicate()

将标准输入 标准输出 错误全部替换了。

四、去除不必要的库。

以后再写。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值