macOS+Anaconda3环境下PyInstaller编译Python脚本遇TypeError错误求助
解决PyInstaller打包时的sysconfig TypeError问题
嘿,我之前在Anaconda环境里打包Python脚本时也碰到过一模一样的错误!这是因为PyInstaller的hook脚本和Anaconda自带的Python 3.6版本不兼容——sysconfig._get_sysconfigdata_name()这个函数在Anaconda的Python 3.6里需要传入参数,但PyInstaller的hook文件里没传,所以才报了这个TypeError。
下面是几个亲测有效的解决办法,按优先级推荐:
方法一:安装兼容版本的PyInstaller
针对Python 3.6,PyInstaller 3.6版本和Anaconda的兼容性最好。你可以先卸载当前的PyInstaller,再安装指定版本:
pip uninstall pyinstaller -y pip install pyinstaller==3.6
装完之后再重新跑你的打包命令:
pyinstaller --onefile /Directory/file.py
方法二:手动修复PyInstaller的hook文件
如果不想换版本,也可以直接修改出错的hook文件:
- 打开路径
/anaconda3/lib/python3.6/site-packages/PyInstaller/hooks/hook-sysconfig.py - 找到第42行的代码:
hiddenimports = [sysconfig._get_sysconfigdata_name()] - 修改成下面这样,给函数传入必要的参数:
hiddenimports = [sysconfig._get_sysconfigdata_name(sys.version_info)]
保存文件后再重新打包就没问题了。
方法三:用干净的虚拟环境打包
有时候Anaconda的base环境依赖太杂,容易出各种奇怪的问题。你可以创建一个专门的虚拟环境来打包:
# 创建一个Python3.6的虚拟环境 conda create -n py_pack_env python=3.6 # 激活这个环境 conda activate py_pack_env # 安装你的脚本需要的依赖,再装PyInstaller3.6 pip install 你的依赖包名称 pyinstaller==3.6 # 执行打包命令 pyinstaller --onefile /Directory/file.py
我自己当时用方法一就搞定了,你可以先试试这个,不行再换其他方法~
内容的提问来源于stack exchange,提问作者Noah Jb
相关产品推荐
相关产品推荐

