PyInstaller打包报错:期望str/bytes/os.PathLike对象而非NoneType
解决PyInstaller打包时报错TypeError: expected str, bytes or os.PathLike object, not NoneType
从你的回溯信息能直接定位问题:PyInstaller的bindepend.get_python_library_path()函数返回了None,导致后续os.path.basename()因为参数为None触发类型错误。既然你只是更新了业务代码、没碰核心依赖逻辑,那问题大概率出在PyInstaller的路径探测、虚拟环境配置或者版本兼容性上,下面是几个针对性的解决办法:
方法1:手动指定Python动态链接库路径
既然自动探测失效,我们直接把Python的dll文件手动加入打包配置:
- 找到你系统Python安装路径下的dll文件,比如你这里的路径应该是
C:\Users\richa\AppData\Local\Programs\Python\Python37\python37.dll - 如果你用spec文件打包,修改spec里的
Analysis部分,添加binaries参数:
a = Analysis(['your_script.py'], pathex=['C:\\Users\\richa\\PycharmProjects\\newEDAT'], binaries=[('C:\\Users\\richa\\AppData\\Local\\Programs\\Python\\Python37\\python37.dll', '.')], datas=[], # 保留原spec里的其他参数 ...)
- 如果你直接用命令行打包,加上
--add-binary参数:
pyinstaller --add-binary "C:\Users\richa\AppData\Local\Programs\Python\Python37\python37.dll;." new_EDAT_116.py
方法2:更换为稳定版PyInstaller
你当前用的是PyInstaller 3.5.dev0开发预览版,这类版本可能存在未修复的路径探测bug,换成官方稳定版大概率能解决问题:
# 卸载当前开发版 pip uninstall pyinstaller -y # 安装最新稳定版 pip install pyinstaller
方法3:重建虚拟环境
虚拟环境在频繁更新依赖后可能出现文件损坏或路径配置异常,试试重新搭建环境:
- 删除项目下的
venv文件夹 - 重新创建虚拟环境:
python -m venv venv
- 激活环境并重装所有依赖:
venv\Scripts\activate pip install pyodbc pandas openpyxl pyqt5 pyinstaller
- 重新尝试打包
方法4:用系统Python环境打包测试
如果虚拟环境的问题一直无法解决,可以暂时退出虚拟环境,直接用系统安装的Python来安装依赖并打包,排除虚拟环境的干扰。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

