解决mac os m1使用pyinstller报错 command not found的问题
今天需要在一个m1的机器上使用pyinstaller打包一个python程序,报错command not found
-
于是通过
pip3 install pyinstaller
,安装成功后依然无法找到命令,但通过pip3 show pyinstaller 却是有正常输出,说明已经安装成功
-
通过pip安装的工具,会被安装到python的bin目录下,应该是python的目录没有添加到PATH,导致无法找到
-
将python的bin目录添加到PATH,
vi ~/.bash_profile
,完成后如下:
-
pyinstaller -v
后正常
-
再次运行打包命令,报错如下:
原因:pyinstaller需要依赖bootloader进行打包,常规的平台和架构,pyinstaller已经带了编译好的bootloader;但由于我的电脑是M1的,而pyinstaller没有为macos预编译出arm64架构的bootloader
解决办法:自行安装bootloader,按报错信息的提示打开 编译指引
参考macosx平台的编译指引进行编译,大致分如下几步:
- git clone 源码或者下载源码后解压
- cd 到源码目录下的bootloader目录
- 编译bootloader 根据官方的编译指引,不同平台下的编译命令有所不同,我的是macos arm64架构,使用
CC='clang -arch=arm64' python waf --no-universal2 all
进行编译 - 编译的产物会被生成至源码目录下的PyInstaller/bootloader目录,如下:
- 需要将编译出来的平台产物drawwin-64bit,以及images资源copy到,python site-packages的pyinstaller的安装目录下,这个目录在上面的报错信息可以找到,如上报错信息,我的电脑上是
/Users/vathena/Library/Python/3.8/lib/python/site-packages/PyInstaller/bootloader
,site-packages/PyInstaller目录下没有 bootloader,手动创建一个可以。拷贝完后的结构和内容如下:
- 最后再运行
pyinstaller -w -D brepo.py
,一切正常