You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用py2app打包Tkinter应用时遇zmq及libffi依赖错误求助

解决py2app打包Tkinter应用的两个关键问题

一、处理zmq的.dylibs文件夹缺失错误

1. 排除不必要的zmq依赖

如果你的应用没有直接或间接使用zmq,在setup.py的OPTIONS中添加排除配置,阻止py2app尝试打包zmq:

OPTIONS = {
    'excludes': ['zmq']
}

修改后的完整setup.py示例:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['Genisis.py']  # 测试时替换为对应py文件名
DATA_FILES = []
OPTIONS = {
    'excludes': ['zmq']
}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

2. 若需保留zmq依赖

通过conda重新安装zeromq,确保.dylibs文件夹生成:

conda install -c conda-forge zeromq --force-reinstall

安装完成后检查/opt/anaconda3/lib/python3.9/site-packages/zmq/路径下是否出现.dylibs文件夹(按cmd+shift+.显示隐藏文件)。


二、处理启动时libffi.8.dylib缺失错误

该问题源于Anaconda环境的动态库路径未被py2app正确识别,有两种解决方式:

1. 手动指定包含该动态库

先找到libffi.8.dylib的位置:

find /opt/anaconda3 -name libffi.8.dylib

假设输出路径为/opt/anaconda3/lib/libffi.8.dylib,修改setup.py的OPTIONS添加包含配置:

OPTIONS = {
    'excludes': ['zmq'],  # 若之前加了排除zmq的配置,保留
    'include_files': ['/opt/anaconda3/lib/libffi.8.dylib']
}

2. 切换到标准CPython环境(推荐)

Anaconda的包结构与py2app兼容性较差,建议使用官方标准CPython:

  • 用pyenv安装对应版本的官方Python:
    pyenv install 3.9.x  # 替换为你需要的版本
    pyenv local 3.9.x
    
  • 创建虚拟环境并安装依赖:
    python -m venv venv
    source venv/bin/activate
    pip install py2app tkintertable numpy pillow pandas matplotlib scipy
    
  • 再执行打包命令,兼容性问题会大幅减少。

通用打包前准备

每次打包前清理缓存,避免旧文件干扰:

rm -rf build dist

内容的提问来源于stack exchange,提问作者Oxs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:23:36