【发布时间】:2017-08-29 04:48:27
【问题描述】:
我在 Mac OS Sierra 上使用带有 pyenv 和 homebrew 的 python 3.6.2,我无法使用 py2app v0.14 和 pyinstaller v3.2.1 创建功能性捆绑应用程序。
已安装 ActiveTcl 版本 8.5.18/tkinter。
标准 2.7.10 Mac 版本的 python 并没有做太多其他事情。实际上,我设法在 python 2.7.10 上与其他程序一起工作一两次尝试,但由于我想使用 3.6.2,所以没有必要保持标准。
py2app 创建一个 .app 文件,它只给出“错误”并且 Mac 要求终止。 pyinstaller 甚至不创建 .app 文件。我按照所有程序中的所有说明进行操作。
py2app 在创建 .app 时最后给了我这个消息:
Modules not found (unconditional imports):
* com (com.sun.jna)
* com.jna (com.sun)
* com.sun (com.sun.jna.platform)
* ordereddict (pkg_resources._vendor.pyparsing)
* win32com (win32com)
* win32com.shell (win32com.shell)
* win32com.shellcon (win32com.shell)
Modules not found (conditional imports):
* StringIO (pkg_resources._vendor.six)
* com (pkg_resources._vendor.appdirs)
* com.sun.jna (pkg_resources._vendor.appdirs)
* com.sun.jna.platform (pkg_resources._vendor.appdirs)
* win32com (pkg_resources._vendor.appdirs)
* win32com.shell (pkg_resources._vendor.appdirs)
我检查了缺少的模块,对我来说,程序似乎没有尝试使用上面列出的任何模块。
我从网上找的程序,是一个简单的测试程序,脚本如下:
from tkinter import *
from tkinter import ttk
def calculate(*args):
try:
value = float(feet.get())
meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
except ValueError:
pass
root = Tk()
root.title("Feet to Meters")
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
feet = StringVar()
meters = StringVar()
feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)
feet_entry.grid(column=2, row=1, sticky=(W, E))
ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)
ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
feet_entry.focus()
root.bind('<Return>', calculate)
root.mainloop()
我已经尝试卸载并重新安装 python、ActiveTcl,我已经运行了 brew doctor,但似乎没有任何效果。 Pyenv 工作正常。 Homebrew 运行良好。
我已经到处搜索了两天,无论每次 py2app 创建 .app 文件时我做什么,它只会给出“错误”。
当我通过 IDLE 运行时,应用程序运行完美。会是什么问题???
编辑:经过一段时间的解决后,我找到了一个使用 cx_freeze 的 python 3.6.2 解决方案。正如我之前所说,Py2app 仅适用于 Python 2.7.10。出于某种原因,Py2app 仅在使用 python 2.7.10 运行时加载我之前提到的缺少的模块,当 python 3.6.2 进来时,他无法加载模块并且 .app 文件无法正常工作。
【问题讨论】: