Windows下Python3.10使用cx_Freeze打包报traitlets权限错误如何解决
cx_Freeze打包报traitlets目录权限拒绝解决方法
错误触发原因
该错误是cx_Freeze收集依赖包元数据阶段,读取traitlets包的许可证目录时被系统拦截,哪怕以管理员身份运行CMD也可能触发,常见诱因包括:
- 目标目录被杀毒软件/系统进程占用锁定
- Python用户站点包目录权限配置异常
- 旧版本cx_Freeze对新版dist-info许可证目录的遍历逻辑存在bug
按优先级尝试以下解决方案
方案1:配置打包规则跳过异常目录(成功率最高,操作最快)
修改现有setup.py,添加打包配置跳过非必需的许可证目录扫描,修改后完整代码如下:
import sys from cx_Freeze import setup, Executable build_exe_conf = { # 跳过遍历触发报错的traitlets许可证目录,该文件不影响程序运行 "bin_excludes": ["traitlets-5.2.2.post1.dist-info/license_files"] } exe = Executable( script=r"WCA_TOOL.py", base="Win32GUI", ) setup( name = "TESTApp", version = "0.1", description = "An example", options={"build_exe": build_exe_conf}, executables = [exe] )
修改完成后清空之前生成的build、dist缓存目录,重新执行打包命令即可。
方案2:手动修复目录权限
定位到报错路径(替换路径中为你自己的Windows用户名):C:\Users\你的用户名\AppData\Roaming\Python\Python310\site-packages\traitlets-5.2.2.post1.dist-info\license_files
- 右键该文件夹选择「属性」-「安全」选项卡
- 点击「编辑」,给当前登录用户、Administrators用户组勾选「完全控制」权限后保存
- 临时关闭杀毒软件实时防护(部分安全软件会锁定Python包目录防止恶意篡改),再重新打包
方案3:升级相关依赖修复已知bug
旧版本cx_Freeze对符合PEP 639规范的许可证目录处理存在逻辑缺陷,执行以下命令升级依赖到最新版:
pip install --upgrade cx_Freeze traitlets
升级完成后清理旧打包缓存,重新执行打包流程即可。
额外提示:打包时尽量把源码放在非系统盘的纯英文路径下,不要放在桌面、C盘根目录等系统受控路径,能规避绝大多数Windows环境下的路径、权限类报错。
内容的提问来源于stack exchange,提问作者ing_lasofre
相关产品推荐
相关产品推荐

