py2app 是一个将 Python 脚本打包为 macOS 应用程序的工具。下面是一个完整的使用示例:
基本使用步骤
1. 安装 py2app
bash
pip install py2app
2. 创建简单的 setup.py 文件
假设你有一个名为 myapp.py 的 Python 脚本:
python
# myapp.py
import tkinter as tk
from tkinter import messagebox
def main():
root = tk.Tk()
root.title(" eikkafy.com ")
label = tk.Label(root, text="Hello, py2app!")
label.pack(padx=20, pady=20)
button = tk.Button(root, text="Click Me", command=lambda: messagebox.showinfo("Info", "You clicked the button!"))
button.pack(pady=10)
root.mainloop()
if __name__ == "__main__":
main()
3. 创建 setup.py 文件
python
# setup.py
from setuptools import setup
APP = ['myapp.py']
DATA_FILES = []
OPTIONS = {
'argv_emulation': True,
'iconfile': 'app.icns', # 可选的应用图标
'plist': {
'CFBundleName': "MyApp",
'CFBundleDisplayName': "My Python App",
'CFBundleIdentifier': "com.example.myapp",
'CFBundleVersion': "1.0.0",
'CFBundleShortVersionString': "1.0",
}
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
4. 构建应用程序
在终端运行:
bash
python setup.py py2app
这将在 dist 目录下生成一个 .app 文件。
高级选项示例
包含数据文件和资源
python
# setup.py
from setuptools import setup
APP = ['myapp.py']
DATA_FILES = [
('Resources', ['data/config.json', 'images/logo.png']),
('Documents', ['README.txt'])
]
OPTIONS = {
'argv_emulation': True,
'includes': ['PIL', 'numpy'], # 包含额外的模块
'packages': ['requests'], # 包含整个包
'iconfile': 'app.icns',
'plist': {
'NSHumanReadableCopyright': '© 2023 My Company',
'LSUIElement': True, # 设置为后台应用(无Dock图标)
}
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
使用 Alias 模式(开发模式)
在开发时,可以使用 alias 模式,这样修改代码后无需重新构建:
bash
python setup.py py2app -A
常见问题解决
模块未包含:如果运行时提示缺少模块,在 OPTIONS 中添加 'includes' 或 'packages'
图标设置:
创建 app.icns 文件(可以使用在线工具将 PNG 转换为 ICNS)
放在项目根目录或指定路径
Python 3 兼容性:
确保使用支持 Python 3 的 py2app 版本
在 setup.py 中可能需要指定 python_version
清理构建文件:
bash
python setup.py py2app --clean
完整工作流程示例
创建项目结构:
myapp/
├── myapp.py
├── setup.py
├── app.icns
└── data/
└── config.json
运行构建命令:
bash
cd myapp
python setup.py py2app
运行生成的应用程序:
bash
open dist/MyApp.app
注意:py2app 主要用于 macOS 系统,如果你需要在其他平台上打包,可以考虑:
Windows: py2exe 或 cx_Freeze
Linux: cx_Freeze 或 PyInstaller
跨平台: PyInstaller