python cross platform apps

Refresh

December 2018

Views

2.1k time

2

I'm trying to make an app in CPython that should work on both linux and windows. I'm using the webkit library, witch works fine on linux (Ubuntu 12.04), but I can't get it to work on Windows.

I know that I can compile my app into a Windows executable (.exe) with py2exe, but to do that it must work on my Windows machine.

The question is: Is there any way I can package my app under linux, so it will have it's dependencies (webkit) bundled with it, so it will work under Windows? Or is there any way to make a windows executable that doesn't need any dependencies from a python file, under linux?

Thank you!

EDIT: Here is my code for the test app:

import gtk
import webkit

class Base:
   def __init__(self):   
       self.builder = gtk.Builder()    
       self.builder.add_from_file("youtubeWindow.ui")       
       self.main_window = self.builder.get_object("main_window")
       self.scrl_window = self.builder.get_object("scrl_window")
       self.webview = webkit.WebView()
       self.scrl_window.add(self.webview)
       self.webview.show()  
       self.webview.open("http://youtu.be/o-akcEzQ6Y8") 
       self.main_window.show()

   def main(self):
       gtk.main()

print __name__
if __name__ == "__main__":
    base = Base()
    base.main()

2 answers

0

Чтобы запустить скрипт на Windows, вам необходимо установить Webkit и его привязки для Windows (библиотек). Эти 2 ссылок ниже, обеспечивают установочные файлы и инструкцию.

http://opensourcepack.blogspot.com/2009/12/pywebkitgtk-windows-binary.html http://opensourcepack.blogspot.com/2011/01/conservative-all-in-one-pygtk-installer.html

Второе звено обеспечивает бинарный код, который устанавливает все необходимые библиотеки (пакет всех-в-одном).

7

Хорошо, так что я не мог получить WebKit работать на окнах с GTK, но я обнаружил, что Qt предоставляет интегрированный модуль WebKit, поэтому я закаченный PySide (обертку Qt для Python), и я проверил его с помощью этого сценария:

import sys
from PySide import QtCore
from PySide import QtGui
from PySide import QtWebKit

class MainWindow (QtGui.QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.setGeometry(300,300,800,600)
        self.setWindowTitle('QtPlayer')
        web = QtWebKit.QWebView(self)
        web.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled, True)       
        web.load(QtCore.QUrl("http://youtu.be/Dys1_TuUmI4"))
        web.show()
        self.show()


def main():
    app = QtGui.QApplication(sys.argv)
    win = MainWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main() 

Также я использовал GUI2EXE и * cx_Freeze * упаковать его в EXE - приложения окна. (Не забудьте включить модули atexit, PySide.QtNetwork , более подробно здесь )

Прохладный руководство по Qt-Webkit можно найти здесь (Это usese PyQt, но он совместим с PySide)

Также PySide учебник здесь