解决mac os m1使用pyinstller报错 command not found的问题

发布时间 2023-06-06 17:03:55作者: vathena

今天需要在一个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平台的编译指引进行编译,大致分如下几步:

  1. git clone 源码或者下载源码后解压
  2. cd 到源码目录下的bootloader目录
  3. 编译bootloader 根据官方的编译指引,不同平台下的编译命令有所不同,我的是macos arm64架构,使用CC='clang -arch=arm64' python waf --no-universal2 all进行编译
  4. 编译的产物会被生成至源码目录下的PyInstaller/bootloader目录,如下:
  5. 需要将编译出来的平台产物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,一切正常