Я использую python 3.6.2 с pyenv и homebrew в Mac OS Sierra, и мне не удалось создать функциональные пакетные приложения с py2app v0.14 и pyinstaller v3.2.1.
ActiveTcl версии 8.5.18/tkinter установлены.
Стандартная версия Python 2.7.10 для Mac больше ничего не делает. На самом деле мне удалось сделать одну или две попытки работать на 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, ничего не работает. Пиэнв работает нормально. Хоумбрю работает нормально.
Я искал везде в течение двух дней, и независимо от того, что я делаю, каждый раз, когда py2app создает файл .app, он выдает только «Ошибку».
Приложение отлично работает, когда я запускаю IDLE. Какая может быть проблема???
EDIT: После некоторого времени работы над этим я нашел решение для python 3.6.2, используя cx_freeze. Как я уже говорил, Py2app работает только с Python 2.7.10. По какой-то причине Py2app загружает только недостающие модули, о которых я упоминал ранее, при работе с python 2.7.10, когда появляется python 3.6.2, он не может загрузить модули, и файл .app не работает должным образом.