使用Pyinstaller给python多文件工程打包

使用Pyinstaller给python工程打包&TclError: can’t find package Tix

最近项目上碰到给写的工具打包的问题,记录一下。

难点背景

1.使用pyinstaller打包多文件夹结构的py工程
2.项目上使用了tix库,但是导入丢失的问题

难点2的背景:
我在创建页面的时候,需要创建一个可勾选的树形图,tkinter库里面没有,所以我使用了tkinter.tix库,我以为初始化toplevel界面的时候类继承自tkinter库,但是在创建root页面的时候,发生如下情况导致我必须继承tix库。
self.cl = tix.CheckList(self.configure_dops_frame, browsecmd=self.selectItem)
self.configure_dops_frame is son of root
root=tk.Tk() is ×
root=tix.Tk() is √

项目结构

文件结构:
	generate:工程文件夹
		resource:资源文件夹
			ecu.xml
			insertnode.xml
		use_method:功能函数调用文件夹
			__init__.py
			use_func.py
			xml_analysis_set.py
		use_window:界面调用参数文件夹
			__init__.py
			set_parameter.py
		__init__.py
		__init_window__.py
关于为什么会有这么多个__init__.py是由于python的多文件夹引用文件机制;

pyinstaller安装与配置

使用pip install pyinstaller 或者是pycharm的添加库安装都可以,这个查教程就行不细说
注意自己使用的python编译器,后文需要使用 

pyinstaller使用

进入项目所在的路径下的终端
我的是c:xxxx\xxxx\xxxx\generate文件夹

步骤:
1.在此路径终端下输入: pyi-makespec __init_window__.py
2.进入生成的__init_window__.spec
	文件格式如下:
	同generate文件夹下py文件可以不用写绝对路径,其他的都需要写绝对路径;datas里面以()一组的格式写了需要引用的xml类型文件存在的文件夹。
	# -*- mode: python ; coding: utf-8 -*-


	block_cipher = None


	a = Analysis(
	    ['__init_window__.py',
	     '__init__.py',
	     'C:xxxx\\xxxx\\xxxx\\generate\\use_method\\__init__.py',
	     'C:xxxx\\xxxx\\xxxx\\generate\\use_method\\use_func.py',
	     'C:xxxx\\xxxx\\xxxx\\generate\\use_method\\xml_analysis_set.py',
	     'C:xxxx\\xxxx\\xxxx\\generate\\use_window\\__init__.py',
	     'C:xxxx\\xxxx\\xxxx\\generate\\use_window\\set_parameter.py'],
	    pathex=['c:xxxx\\xxxx\\xxxx\\generate'],
	    binaries=[],
	    datas=[('c:xxxx\\xxxx\\xxxx\\generate\\resource', 'resource')],
	    hiddenimports=['tix'], ***这里应该是没生效的,可以删除***
	    hookspath=[],
	    hooksconfig={},
	    runtime_hooks=[],
	    excludes=[],
	    win_no_prefer_redirects=False,
	    win_private_assemblies=False,
	    cipher=block_cipher,
	    noarchive=False,
	)
	pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
	
	exe = EXE(
	    pyz,
	    a.scripts,
	    [],
	    exclude_binaries=True,
	    name='__init_window__',
	    debug=False,
	    bootloader_ignore_signals=False,
	    strip=False,
	    upx=True,
	    console=False,
	    disable_windowed_traceback=False,
	    argv_emulation=False,
	    target_arch=None,
	    codesign_identity=None,
	    entitlements_file=None,
	)
	coll = COLLECT(
	    exe,
	    a.binaries,
	    a.zipfiles,
	    a.datas,
	    strip=False,
	    upx=True,
	    upx_exclude=[],
	    name='__init_window__',
	)
3.在终端使用pyinstaller __init_window__.spec命令进行打包,看见successful就成功,但是打包完了不一定能用

打包后可能遇见的问题

我遇见的问题是:点击exe会弹出errot报错
	File "tkinter\tix.py", line 214, in __init__ _tkinter.TclError: can't find package Tix
前面我使用的编译器路径是:
	C:\Program Files\Python38
找到底下的tcl文件夹,打开找到tcl8.6、tix8.4.3
将tix8.4.3拖进tcl8.6,重新打包即可避免找不到包的报错
类似的还有can't find package Tix
都可以使用这种文件拖拽的方法

参考文档

我只尝试了这篇文章后面的方法,前面的未尝试
链接: https://blog.csdn.net/weixin_50674989/article/details/120683109?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2defaultOPENSEARCHRate-4-120683109-bbs-394474987.pc_relevant_bbs_down_v2_opensearchbbsnew&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2defaultOPENSEARCHRate-4-120683109-bbs-394474987.pc_relevant_bbs_down_v2_opensearchbbsnew

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值