Как я могу создать кросс-платформенное приложение с прямым исполнением, использующее 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.