[Python-de] PythonRuntime -- war: Dokumentation zu 2.3 & wxPython im HTMLHelp-Format

Carl Kleffner cmkleffner at gmx.de
Don Aug 14 18:17:42 EDT 2003


Ich denke es ergibt  nicht viel Sinn eine solche Runtime Version zu
erstellen.
Wer mal schnell ein Skript ausprobieren will, wird feststellen, dass er je
nach
Vorlieben des Autors eine ganze Reihe verschiedener zusätzlicher
Module braucht: gtk, gtk-2.0, QT, wxwindows, Tix und eine vollständiges
TclTk,
numpy oder darfs numeric sein? twisted, webware, cherrypy; und und und.
Also, was soll/darf so eine Python Runtime beinhalten?

Dann schon lieber ein mit p2exe zusammengepacktes Windowsbinary, welches
allerdings auch nicht jeder mal eben auf seiner Webseite zur Verfügung
stellen will.

Für eigene einfache Python Distributionen habe ich mir mal eine Python
single-file
runtime Version mit freeze (Unix) zusammengebraut:
siehe:

http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&oe=UTF-8&threadm=3b091a1c.0301062340.34916919%40posting.google.com&rnum=9&prev=/groups%3Fhl%3Dde%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26q%3Dcmkleffner%26btnG%3DGoogle%2BSuche%26meta%3Dgroup%253Dcomp.lang.python.*

Diese single-file runtime hat den Vorteil, das man alle Module die man so
braucht in
das binary reinpackt.  Statt einer kompletten Pythoninstallation wird nur
noch diese
Runtime und die Skripte weitergegeben (unter Unix kann man auch alles
statisch linken,
wenn man Python selber compiliert hat).

Unter Windows könnte das so aussehen: getestet mit cxfreeze
(in sys.path wird hier nur das Verzeichnis des executables sowie das
Verzeichnis des Python Skriptes eingetragen)

Die Python Version unter Windows besteht also nur noch aus der runtime.exe
Datei und dazugehörigen DLL's und pyd's.

Die gefreezten Python-Module sind in der executable enthalten. Je mehr man
dort hineinpackt, desto fetter wird natürlich dieses
File.


Carl

-------------------------------------------------------------------------------

#!/usr/bin/env python
"pyrt.py  --  single file python runtime"

import sys,os

if [0][0]:                                # fool the modulefinder
    # import needed modules here....
    import xxxxx
    ......

#--- modify sys.path und sys.argv[0]
sys.path.append(os.path.join(os.path.dirname(sys.argv[0]),'lib'))
sys.argv = sys.argv[1:]         # del first argument
root_dir = sys.exec_prefix      # root path for module
sys_path = sys.path[:]
for i in sys_path:              # del root path from syspath
    if i.find(root_dir) >= 0:
        idx = sys.path.index(i)
        sys.path.pop(idx)

del root_dir, sys_path
if 'i' in vars():   del i
if 'idx' in vars(): del idx

if sys.argv and os.path.isfile( sys.argv[0] ): # script exists?

    script_dirname = os.path.dirname(
        os.path.abspath( sys.argv[0] ))        # absolute dir

    if script_dirname not in sys.path:
        sys.path.append( script_dirname )
    del script_dirname

    try:
        execfile( os.path.abspath( sys.argv[0] ) ) # run script
    except:
        print "\nruntime error with: %s!" % os.path.abspath(sys.argv[0] )

else:
    print "embedded single file python interpreter."
    print "usage:  python [ skriptfile [ args ] ]\n"
    print "Python %s on %s" % (sys.version, sys.platform)

# python FreezePython.py --base-binary ConsoleBase.exe \
#  --copy-extensions \
#  --install-dir testruntime pyrt.py  \
#  > freezepyrt.log


> Hi Gerhard,
>
> da Du mich auf dieses Posting von Dir hingewiesen hast, hier mein
> Kommentar:
>
> > Die Lösung: PythonRuntime.
> Hey, genau dahin ging ja auch meine Frage!
>
> > Komponenten *gar nicht* mehr. Eine neue Version von PythonRuntime könnte
>
> > z. B. alle 12 Monate herausgebracht werden.
> Ich hätte jetzt eher gedacht, passend zur offiziellen Version von
> python.org gibt es eine Runtime-Version. Sonst würde halt die Runtime-
> Version und die python.org-Version immer ein Zeit lang auseinander
> driften.
> Wäre aber vermutlich auch akzeptabel.
>
> > Das PythonRuntime Basissystem besteht aus einem abgespeckten Python
> (kein
> > test/, libs/, .../distutils, usw.)
> kein IDLE, keine DOC-Files...
>
> > und aus einem minimalen Paketmanagement.
> ? Zum Erstellen der Runtime-version?
>
> Nachdem man dann eine Runtime-Version hätte, könnte sich die ein
> "Nur-User"
> runterladen und lokal installieren, aber im folgenden scheinst Du was
> anderes anzustreben, ein Distribution der Runtime über einen Server, zB in
>
> einem Firmennetzwerk? Oder was meinst Du, ist mir unklar.
>
> > Der Pfad zum PythonRuntime-Verzeichnis ist in der Registry hinterlegt.
> Ist das irgendwo im Netz auf einem Server oder lokal installiert?
>
> > - nice to have: minimale Extension, die den Progress beim Downloaden der
>
> > Komponenten anzeigt
> Download der Komponenten - also die PythonRuntime-Teile werden von einem
> Server im Netz geladen, sobald der User sein lokales Script ausführen
> will,
> er aber kein Python installiert hat? So eine Technik wirft aber viele
> Fragen auf - hm, ich glaube, ich sage erstmal nichts weiter, habe es
> vermutlich doch nicht richtig verstanden.
>
>
> Mit freundlichen Grüßen
> Klaus Meyer :-)
>
> 

-- 
COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test
--------------------------------------------------
1. GMX TopMail - Platz 1 und Testsieger!
2. GMX ProMail - Platz 2 und Preis-Qualitätssieger!
3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post