Pyinstaller打包
pyinstaller是一个非常简单的打包python的py文件的库,
把py文件打包成exe文件,方便给小白执行程序。
官网介绍 http://www.pyinstaller.org/
安装
1 | pip install pyinstaller |
使用PyInstaller生成exe文件
1 | Pyinstaller - F - w - i tk_down.ico test_gui.py |
其中tk_down.ico 为图标文件
-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面时非常有用。
-i 表示可执行文件的图标
举例:
(v1) C:\Users\spyider>Pyinstaller -F -w -i tk_down.ico test_gui.py 1788 INFO: PyInstaller: 4.5.1 1789 INFO: Python: 3.6.4 (conda) 1790 INFO: Platform: Windows-7-6.1.7601-SP1 1792 INFO: wrote C:\Users\china\pord_spyider\test_gui.spec 1796 INFO: UPX is not available. 1798 INFO: Extending PYTHONPATH with paths ['C:\\Users\\spyider', 'C:\\Users\\spyider'] 2315 INFO: checking Analysis 2393 INFO: checking PYZ 2419 INFO: checking PKG 2420 INFO: Building because toc changed 2421 INFO: Building PKG (CArchive) PKG-00.pkg 6012 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully. 6052 INFO: Bootltestder c:\programdata\anaconda3\lib\site-packages\PyInstaller\boo tltestder\Windows-32bit\runw.exe 6053 INFO: checking EXE 6054 INFO: Rebuilding EXE-00.toc because test_gui.exe missing 6055 INFO: Building EXE from EXE-00.toc 6058 INFO: Copying icons from ['tk_down.ico'] 6069 INFO: Writing RT_GROUP_ICON 0 resource with 20 bytes 6069 INFO: Writing RT_ICON 1 resource with 67624 bytes 6075 INFO: Updating manifest in C:\Users\china\pord_spyider\build\test_gui\runw.ex e.on_gk_di 6083 INFO: Updating resource type 24 name 1 language 0 6088 INFO: Appending archive to EXE C:\Users\spyider\dist\test_gui.exe 11275 INFO: Building EXE from EXE-00.toc completed successfully.
错误解决
File "c:\programdata\anaconda3\envs\v1\lib\site-packages\PyInstaller\hooks\hook-distutils.py", l hiddenimports = [sysconfig._get_sysconfigdata_name()] TypeError: _get_sysconfigdata_name() missing 1 required positional argument: 'check_exists'
首先,转到python交互式shell,做
$ python >> import sysconfig >> print(sysconfig.__file__)
这应该为您提供文件所在的位置sysconfig。然后你需要去那个文件并编辑源代码,
修改了check_exists= True
源文件修改后
def _get_sysconfigdata_name(check_exists= True): res = os.environ.get('_PYTHON_SYSCONFIGDATA_NAME', None) if res and check_exists: try: loader = importlib.util.find_spec(res) except: res = None if res: return res return '_sysconfigdata_{abi}_{platform}_{multiarch}'.format( abi=sys.abiflags, platform=sys.platform, multiarch=getattr(sys.implementation, '_multiarch', ''))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架