Как я могу создать кросс-платформенное приложение с прямым исполнением, использующее Python?


263

Python работает на нескольких платформах и может использоваться для настольных и веб-приложений, поэтому я пришел к выводу, что есть некоторый способ скомпилировать его в исполняемый файл для Mac, Windows и Linux.

Проблема в том, что я понятия не имею, с чего начать или как написать GUI, может кто-нибудь пролить свет на это и указать мне правильное направление, пожалуйста?

Ответы:


285

Сначала вам понадобится некоторая библиотека GUI с привязками Python, а затем (если вы хотите) какая-нибудь программа, которая преобразует ваши скрипты Python в автономные исполняемые файлы.

Кроссплатформенные библиотеки GUI с привязками Python (Windows, Linux, Mac)

Конечно, есть много, но самые популярные, которые я видел в дикой природе:

  • Tkinter - на основе инструментария Tk GUI (де-факто стандартная библиотека GUI для python, бесплатная для коммерческих проектов)
  • WxPython - на основе WxWidgets (популярный, бесплатный для коммерческих проектов)
  • Qt используя привязки PyQt или Qt для Python . Первый не является бесплатным для коммерческих проектов. Последний менее зрелый, но может быть использован бесплатно.

Полный список на http://wiki.python.org/moin/GuiProgramming

Единый исполняемый файл (все платформы)

  • PyInstaller - самый активный (также может использоваться с PyQt)
  • fbs - если вы выбрали Qt выше

Единственный исполняемый файл (Windows)

  • py2exe - раньше был самым популярным

Единственный исполняемый файл (Linux)

  • Freeze - работает так же, как py2exe, но ориентирован на платформу Linux

Один исполняемый файл (Mac)

  • py2app - опять же, работает как py2exe, но ориентирован на Mac OS

19
Поговорим о pyinstaller для Windows, а не py2exe.
журнал изменений

8
Стоит отметить, что с 4.5 QT будет под LGPL.
CTT

14
... вот почему вы должны очень рассмотреть возможность использования PySide, который является LGPL. Это также более Pythonic, чем PyQt4 Python 2 API.
Крис Морган

4
Вы также можете добавить cx_Freeze , который является кроссплатформенным, поддерживается и поддерживает Python 3.x.
fbmd

2
Почему здесь нет упоминания о Киви ? Разве это не правильный вариант для этого вопроса?
SilSur

56

Другая система (еще не упомянутая в принятом ответе) - это PyInstaller, которая работала для моего проекта PyQt, когда py2exe не работал. Мне было проще в использовании.

http://www.pyinstaller.org/

Pyinstaller основан на установщике Python Гордона Макмиллана. Который больше не доступен.


1
И спустя более 3 лет после того, как был написан этот ответ, pyinstaller STILL не поддерживает Python 3 и не включен в план будущих выпусков. Я имею в виду, действительно ли поддержка AIX и Solaris более полезна, чем Python 3?
Дейв

11
Теперь он поддерживает Python 2.7 и Python 3.3, 3.4 и 3.5.
Кату

4
И 3.6 тоже сейчас.
Rexcirus

14

Альтернативным инструментом для py2exe является bbfreeze, который генерирует исполняемые файлы для Windows и Linux. Это новее, чем py2exe и обрабатывает яйца довольно хорошо. Я обнаружил, что он волшебно работает лучше без конфигурации для широкого спектра приложений.


11

Есть также PyGTK , который в основном является оболочкой Python для Gnome Toolkit. Я обнаружил, что мне легче сосредоточиться на этом, чем на Tkinter, поскольку он практически не знаком с программированием GUI ранее. Он работает довольно хорошо и имеет несколько хороших уроков. К сожалению, пока нет установщика для Python 2.6 для Windows, и, возможно, пока не будет.


6

Поскольку python теперь установлен практически во всех операционных системах, отличных от Windows, единственное, в чем вы действительно должны убедиться, это то, что установлены все нестандартные библиотеки, которые вы используете.

Сказав это, можно создать исполняемые файлы, которые включают интерпретатор Python и любые библиотеки, которые вы используете. Однако это может создать большой исполняемый файл.

MacOS X даже включает поддержку в Xcode IDE для создания полностью автономных приложений с графическим интерфейсом. Они могут быть запущены любым пользователем под управлением OS X.


6

Для самого GUI:

PyQT в значительной степени ссылка.

Другой способ разработки быстрого пользовательского интерфейса - написать веб-приложение, запустить его локально и отобразить приложение в браузере.

Кроме того, если вы выберете вариант Tkinter, предложенный lubos hasko, вы можете попробовать portablepy, чтобы ваше приложение работало в среде Windows без Python.


4

Я не уверен, что это лучший способ сделать это, но когда я развертываю приложения Ruby GUI (не Python, но имеет ту же самую «проблему», что касается .exe) в Windows, я просто пишу короткий лаунчер в C #, который вызывает мой основной скрипт. Он компилируется в исполняемый файл, а затем у меня есть исполняемый файл приложения.


@Brian Вы когда- нибудь видели технику _why для самообслуживания приложений Shoes? Возможно, это можно сделать с помощью программ, не относящихся к обуви.
Адам Лассек

Для этих приложений никто из моих пользователей не является анонимным. Я знаю, есть ли у них среда выполнения, и если нет, я могу установить ее для них. Основная проблема в этом разделе - как запустить эти приложения без необходимости открывать командную строку и вводить исполняемый файл среды выполнения, а затем имя программы.
Брайан Уоршоу

2
# I'd use tkinter for python 3

import tkinter

tk = tkinter.Tk()
tk.geometry("400x300+500+300")
l = Label(tk,text="")
l.pack()
e = Entry(tk)
e.pack()

def click():
    e['text'] = 'You clicked the button'

b = Button(tk,text="Click me",command=click)
b.pack()

tk.mainloop()

# After this I would you py2exe
# search for the use of this module on stakoverflow
# otherwise I could edit this to let you know how to do it

py2exe

Затем вы должны использовать py2exe, например, чтобы принести в одну папку все файлы, необходимые для запуска приложения, даже если у пользователя нет python на своем компьютере (я говорю о windows ... для apple os нет необходимости о исполняемом файле, я думаю, так как он поставляется с Python без необходимости его установки.

Создать этот файл

1) Создайте setup.py

с этим кодом:

from distutils.core import setup
import py2exe

setup(console=['l4h.py'])

сохранить его в папке

2) Поместите вашу программу в ту же папку, что и setup.py, поместите в эту папку программу, которую вы хотите сделать распространяемой: es: l4h.py

ps: изменить имя файла (с l4h на что угодно, это пример)

3) Запустите cmd из этой папки (в папке щелкните правой кнопкой мыши + shift и выберите здесь start cmd)
4) напишите в cmd:> python setup.py py2exe
5) в папке dist есть все нужные вам файлы
6) вы может распространять и распространять

Pyinstaller

Установите его из cmd

**

pip install pyinstaller

**

Запустите его из cmd из папки, где находится файл

**

pyinstaller file.py

**


2

PySimpleGUI оборачивает tkinter и работает на Python 3 и 2.7. Он также работает на Qt, WxPython и в веб-браузере, используя один и тот же исходный код для всех платформ.

Вы можете создавать пользовательские графические интерфейсы, которые используют все те же виджеты, которые вы найдете в tkinter (ползунки, флажки, переключатели, ...). Код имеет тенденцию быть очень компактным и читабельным.

#!/usr/bin/env python
import sys
if sys.version_info[0] >= 3:
    import PySimpleGUI as sg
else:
    import PySimpleGUI27 as sg

layout = [[ sg.Text('My Window') ],
          [ sg.Button('OK')]]

window = sg.Window('My window').Layout(layout)
button, value = window.Read()

Изображение создано из размещенного кода PySimpleGUI

Как объясняется в документации PySimpleGUI , для создания запускаемого файла .EXE :

pyinstaller -wF MyGUIProgram.py


1

Вам не нужно компилировать python для Mac / Windows / Linux. Это интерпретируемый язык, поэтому вам просто нужно установить интерпретатор Python в выбранной вами системе (он доступен для всех трех платформ).

Что касается библиотеки GUI, которая работает кроссплатформенно, библиотека виджетов Tk / Tcl в Python работает очень хорошо, и я считаю, что она достаточно кроссплатформенная.

Tkinter - это интерфейс Python для Tk / Tcl

С веб-страницы проекта Python:

Tkinter - не единственный инструментарий GuiProgramming для Python. Тем не менее, он является наиболее часто используемым и почти единственным, который переносим между Unix, Mac и Windows.


4
Итак, как бы вы создали инсталляционный пакет для развертывания в системах людей, которые просто хотят выполнить одношаговую установку (например, дважды щелкните один инсталляционный пакет в Windows)?
Крейг Маккуин

Для этого есть несколько подходов, о которых я знаю: вы, вероятно, написали бы установщик в пакетном скрипте или скомпилировали для целевой системы, который бы где-нибудь отбрасывал нужные файлы и устанавливал необходимые библиотеки и среды выполнения в процессе.
Джастин Стандарт

1
Установка Python как часть вашей собственной установки будет немного затруднительной, поскольку вам придется столкнуться с возможностью того, что будет установлена ​​неправильная версия Python. Вам придется устанавливать бок о бок, чтобы ваше приложение могло получить доступ к недавно установленной версии Python, но все существующие приложения продолжали использовать старую версию Python. (то есть, не путая вещи как ассоциация файла .py или PATH)
Джонатан Хартли

Скорее всего, ваш установщик проверит наличие правильной версии Python, и, если найдет ее, используйте ее, в противном случае установите python как часть процесса установки.
Джастин Стандарт

Правильно - но второй вариант «установить python как часть процесса установки» - это именно то, о чем я говорю. Это было бы неудобно по причинам, которые я привел.
Джонатан Хартли

0

Вы можете использовать appJarдля базовой разработки графического интерфейса.

from appJar import gui

num=1

def myfcn(btnName):   
    global num
    num +=1
    win.setLabel("mylabel", num)

win = gui('Test')

win.addButtons(["Set"],  [myfcn])
win.addLabel("mylabel", "Press the Button")

win.go()

GUI при запуске

Смотрите документацию на сайте appJar .

Установка производится pip install appjarиз командной строки.


0

!!! КИВИ !!!

Я был поражен, увидев, что никто не упомянул Kivy !!!

Я когда-то делал проект с использованием Tkinter, хотя они действительно утверждают, что он значительно улучшился, он все еще дает мне ощущение Windows 98, поэтому я переключился на Kivy .

Я следил за серией уроков если это поможет ...

Просто чтобы дать представление о том, как выглядит kivy, посмотрите это (проект, над которым я работаю):

Проект, над которым я работаю

И я работаю над этим всего неделю! О пользе для кивы ты спрашиваешь? Проверьте это

Причина, по которой я выбрал это, это его внешний вид и то, что его можно использовать и в мобильном телефоне.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.