美文网首页Shell-Python
【python】打包成MAC APP

【python】打包成MAC APP

作者: 地主家有30头牛 | 来源:发表于2022-03-18 13:24 被阅读0次

    写了一个python小程序,想打包成可执行的APP,看网上写的教程很简单,大概就是下面这个样子。

    1.生成setup.py文件

    #main.py就是你实际工程里的主执行程序,我的叫main.py
    py2applet –make-setup main.py  
    

    生成的默认setup.py内容如下:

    屏幕快照 2022-03-19 下午12.57.47 下午.jpeg

    2.打包

    #-A参数不会打包依赖库等,这样打包的程序(下称本地APP)只能在本机或者跟你本机配置一模一样的环境执行,一般要去掉,以保证在任何环境可以正常执行
    python3 setup.py py2app -A
    

    执行后会生成一个build和dist文件夹,dist下的main.app就是生成的可执行程序,双击即可运行。
    但实际上,稍稍复杂一点的工程按照默认的setup.py打包,执行的时候都是会出错的。
    原本的设想是会把工程包按原本的目录结构全部打包,但实际上需要用到的图片,音源,文本等等,在执行的时候都会报错找不到,因为都是要手动配置到setup.py里才能被打包。

    如果不知道自己的APP为什么会报错,可用以下命令执行APP,就可以看到报错信息:

    main.app/Contents/MacOS/main
    

    所以需要修改setup.py如下:

    DATA_FILES = []
    OPTIONS = {
        #指定要打包的第三方库
        'includes': ['pygame'],
        #指定APP里用到的图片,音效,文件等,
        #可以指定文件夹,或是具体的文件
        #指定文件夹就会把整个文件夹都打包
        #这些内容如果放在上面的DATA_FILES里,也可以达到同等效果
        'resources': ['resources'],
        #APP执行时显示的图标,icns是MAC图标的标准文件
        'iconfile': 'LOGO.icns',
        #有待研究,暂时只设定了版本号
        'plist': {'CFBundleShortVersionsString':'0.1.0'}
        }
    

    具体的参数解释:官方文档
    icns的生成参考:【MAC】生成MAC APP图标icns

    ================================

    追加一个打包后运行时遇到的一个让我解决了很久的问题。
    报错信息如下:

    ImportError: dlopen(/Users/chen/Documents/workspace/minesweeper/dist/main.app/Contents/Resources/lib/python3.9/lib-dynload/_ctypes.so, 2): Library not loaded: @rpath/libffi.8.dylib
      Referenced from: /Users/chen/Documents/workspace/minesweeper/dist/main.app/Contents/Resources/lib/python3.9/lib-dynload/_ctypes.so
      Reason: image not found
    

    查了很多信息,应该是动态链接库的问题,当你的依赖库里又去引用另一个库的时候,会出现这种找不到的情况。但是网上的解决办法我都没有试成功,尤其我要保证我的APP去了任何一台机器都可以直接运行。所以最后尝试了最傻的办法。就是直接把这个找不到的库打包进我的APP,虽然这个libffi.8.dylib应该是一个shared lib.

    所以修改setup.py文件里追加如下设置:

    'frameworks': [ '/Users/chen/mambaforge/lib/libffi.8.dylib'],
    

    重新打包后,libffi.8.dylib就会自动出现在Frameworks下面,本机双机运行正常,直接传到其它机器运行也正常了。

    相关文章

      网友评论

        本文标题:【python】打包成MAC APP

        本文链接:https://www.haomeiwen.com/subject/jabgdrtx.html