eGenix PyRun Python Runtime in einer einzigen 12MB Datei FrOSCon 2012 Sankt Augustin Marc-André Lemburg EGENIX.COM Software GmbH Langenfeld, Germany (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun Marc-André Lemburg • Geschäftsführer der eGenix.com GmbH – Mehr als 20 Jahre IT-Erfahrung – Diplom in Mathematik – Experte in Python, Application Design, Web Techniken, Datenbanken, Unicode – Python Core Developer (seit 1997) – Python Software Foundation Vorstandsmitglied (2002-2004, seit 2010) – EMail: [email protected] • eGenix.com Software GmbH, Germany – Gründung in 2000 – Kernbereiche: • Kundenprojekte: Schwerpunkte Python und Datenbanken • Produkte: Python mx Extensions für Python/Plone/Zope/Django (mxODBC, mxDateTime, mxTextTools, etc.) – Internationaler Kundenstamm 2 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun Agenda 1. Einleitung 2. Anwendungsfälle (Use Cases) 3. Technische Details 4. Diskussion 3 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun Agenda 1. Einleitung 2. Anwendungsfälle (Use Cases) 3. Technische Details 4. Diskussion 4 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Motivation • Einfache Installation ohne Nebeneffekte • Kleine Dateigröße / kleiner Download • Sollte leicht in Installer zu integrieren sein • Erweiterbarkeit: Muß .py, .pyc Dateien und C Erweiterungen laden können 5 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Projekt • Python Laufzeit Umgebung in einer einzigen Datei • Baut auf unserem alten mxCGIPython Projekt auf (1999-2006) 6 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Unterstützte Plattformen in PyRun 1.0 • Python Versionen: 2.5, 2.6 and 2.7 … noch kein 3.x • Binaries gibt es für Linux / FreeBSD / Mac OS X Quellen sollten auf jedem Unix basierten System laufen • Windows Unterstützung ist angedacht 7 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun Agenda 1. Einleitung 2. Anwendungsfälle (Use Cases) 3. Technische Details 4. Diskussion 8 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Anwendungsfälle (Use Cases) • Distribution von Programmen und Anwendungen – eGenix nutzt PyRun im mxODBC Connect Server • virtualenv Ersatz • Tests und kleine Skripte • Anwendungsspezifische Python Installationen • Embedded Devices • Viele andere Einsatzmöglichkeiten ... 9 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Ideal für Anwendungen und Skripte • Lädt ca. doppelt so schnell wie Standard-Python – Python 2.7: 0.054u 0.014s – PyRun 2.7: 0.026u 0.014s • Benötigt nur einen kleinen Teil des Plattenplatzes einer regulären Python Installation: – – – – Python 2.7: ca. 100MB PyRun 2.7: 12 MB PyRun 2.7 mit gzexe: 4 MB, aber Startzeit 0.160u 0.054s PyRun 2.7 mit upx: 3.5 MB, aber Startzeit 0.124u 0.017s 10 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: virtualenv Ersatz (1/3) • Einfach zu installieren – PyRun in ein Verzeichnis kopieren – fertig ! optional: – PyRun Verzeichnisstruktur anlegen • Und es geht noch einfacher: per install-pyrun Skript • PyRun benötigt kein Aktivierungsskript (wie virtualenv) 11 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: virtualenv Ersatz (2/3) • Unabhängig von einer Python Systeminstallation • Keine Python Installation nötig • Keine Probleme mit Inkompatibilitäten des System-Python • Keine Symlinks zu verwalten • Problemlos im Dateisystem verschiebbar 12 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: virtualenv Ersatz (3/3) • Klein genug, um mehrere Kopien zu nutzen • 13MB mit pip, setuptools – kann Python Code laufen lassen – kann komplierte C Erweiterungen laden • 36MB mit pip, setuptools, Include Dateien and Zusatzmodulen – kann C Erweiterungen übersetzen – kann Stdlib Zusatzmodule verwenden, die nicht in PyRun enthalten sind – Include Dateien and Zusatzmodule können zwischen mehreren Kopien geteilt werden 13 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun Agenda 1. Einleitung 2. Anwendungsfälle (Use Cases) 3. Technische Details 4. Diskussion 14 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Wie funktioniert PyRun ? • Basiert auf Python's Tools/freeze – mit ein paar kleinen Änderungen • Details – Nutzt ein generiertes Python Startskript und einige generierte Hilfsmodule, um die Konfiguration zu speichern – Fügt weitere Einträge in der Modules/Setup Datei hinzu, um weitere C Module statisch integrieren zu können – Läßt freeze auf fast der gesamten Python Stdlib laufen 15 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Verzeichnisstruktur • PyRun arbeitet relativ zum Verzeichnis der pyrun Programmdatei, was PyRun problemlos verschiebbar macht • PyRun nutzt sein eigenes lib/ Verzeichnis für Erweiterungen und kommt einer Systeminstallation nicht in die Quere • Verzeichnisstruktur: – ./bin/pyrun2.7 – ./lib/python2.7/ (optional, für Erweiterungen) – ./include/python2.7/ (optional, zum Übersetzen von Erweiterungen) 16 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Modulsuche • PyRun sucht relativ zum Verzeichnis <pyrun dir> der pyrun Programmdatei wenn man es mit script.py aufruft: – – – – – <script.py dir> <PYTHONPATH directories> <pyrun dir>/../lib/python2.7/ <pyrun dir>/../lib/python2.7/lib-dynload/ <pyrun dir>/../lib/python2.7/site-packages/ • Lediglich die existierenden Verzeichnisse der Struktur werden in sys.path aufgenommen 17 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Kompatibel mit distutils/setuptools/pip • PyRun kompatibel zu distutils – Python Konfiguration mußte dafür eingepatched werden – Hat dazu geführt, daß wir das Standard Python Verzeichnislayout nicht ändern konnten • PyRun kompatibel zu setuptools und pip – Hierfür mußte die -c Kommandozeilenoption implementiert werden – Sonst eigentlich keine großen Änderungen nötig • PyRun müßte auch mit zc.buildout arbeiten – Haben wir noch nicht getestet 18 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Was fehlt ? • Einige Module sind nicht dabei: – *dbm, crypt, readline, parser, tkinter, _multiprocessing – alle test Packages/Sub-Packages • Diese können aber als normale .so Module oder Packages geladen werden, falls nötig 19 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Was funktioniert nicht ? • Einige Module der Python Test Suite funktionieren nicht, wenn man sie unter der Kontrolle von regrtest.py laufen läßt – Keine Probleme, wenn man die Module direkt startet – Muß noch geprüft werden • Stdlib Module, die Zugriff auf Dateiresourcen in Packages benötigen, funktionieren nicht – idlelib – distutils bdist_wininst – Viele test Packages (aber die sind in PyRun sowieso nicht dabei) 20 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Open Source Lizenz • eGenix Public License – abgeleitet von der CNRI Python License – Open Source kompatibel • Standard Python License – PyRun integriert Python 21 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun Agenda 1. Einleitung 2. Anwendungsfälle (Use Cases) 3. Technische Details 4. Diskussion 22 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Ähnliche Tools • Andere freeze Tools – – – – – py2exe – Windows py2app/bdist_mpkg – Mac OS X cx_Freeze – Unix, Windows PyInstaller – Unix, Windows bbfreeze – Unix, Windows, Mac OS X • Verfolgen andere Zielsetzung – Tools packen Anwendungen in einige wenige Datein 23 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun: Die Zukunft • Bessere Dokumentation • Flexiblere Konfiguration • Windows Support ?! • setup.py ähnliches Kommandozeilen-Interface 24 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun eGenix PyRun • Fragen ? 25 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun Zeit für die Kaffeepause ... Vielen Dank für Ihre Aufmerksamkeit ! 26 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012 eGenix PyRun Kontakt eGenix.com Software, Skills and Services GmbH Marc-André Lemburg Pastor-Löh-Str. 48 D-40764 Langenfeld Germany eMail: Phone: Fax: Web: [email protected] +49 211 9304112 +49 211 3005250 http://www.egenix.com/ 27 (c) 2012 EGENIX.COM Software GmbH, [email protected] FrOSCon 2012