python aufrufen und pfadnamen mitgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Hallo,

ich nutze Python von einem Uni-Netzwerk aus, d.h. python läuft von zentraler stelle aus und wenn ich eigene module nutzen möchte muss ich den Ort der Module auf meinem Computer mit angeben.
Dazu gibt es anscheinend Environment Variablen, wie PYTHONPATH.
Ich weiß nicht, wie ich eine Datei ausführen kann und gleichzeitig PYTHONPATH den Ort der eigenen Module angeben kann.
Versucht habe ich folgendes:
python junk.py PYTHONPATH=/home/server/name/lokale_pymodules
denn junk.py verwendet "import modulname" und "modulname" ist ein Modul aus /home/server/name/lokale_pymodules.

Leider erhalte ich die Fehlermeldung:
"ImportError: No module named modulname"
Was darauf hindeutet, daß der Pfad nicht in die sys.path Liste übernommen wurde.

Grüße,
4bit.-
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du kannst ja auch nicht einfach die Environment-Variable Python mitgeben - zumindest wäre mir diese Möglichkeit neu :-D

Du musst Sie entweder setzen, oder aber eben in Deinem Modul sys.path ergänzen um die lokalen Module. Such mal hier im Forum nach sys.path o.ä., da wirst Du sicherlich fündig!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Andersrum kannst du es machen:

Code: Alles auswählen

PYTHONPATH=/home/server/name/lokale_pymodules python junk.py 
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

danke rebecca und hyperion. das heißt PYTHONPATH ist wirklich eine Variable meines Terminal-Fensters? wie kann ich deren Wert denn auslesen. Wenn ich einfach PYTHONPATH eingebe bekomme ich
bash: PYTHONPATH: command not found
zurück.

Grüße,4bit.
Zuletzt geändert von 4bit am Freitag 20. November 2009, 17:16, insgesamt 2-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

echo $PYTHONPATH
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

@cofi. ah, danke.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Eigentlich versuche ich PyQt zu installieren. Dazu soll configure.py ausgeführt werden. Darauf erhalte ich aber immer:
"es muss mindestens sip version 4.9.0 installiert sein."
Obwohl ich gelesen habe, daß sip normalerweise auf linux systemen installiert ist, habe ich es mir als .tar.gz heruntergeladen und durch "configure, make, make install" installiert. Dabei habe ich Verzeichnis-parameter für 4 Verzeichnisse mitgegeben, da ich ja keine administratorrechte habe, und sip deshalb in meinem lokalen Verzeichnis installieren muß. Das hat soweit ich es beurteilen kann geklappt. Nur was braucht die configure von PyQt denn für einen Pfad, um die Sip Installation zu erkennen?

Grüße,
4bit.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Du brauchst das Verzeichnis mit sipconfig.py.

Mach es Dir doch einfacher und installiere alle sip-Dateien in ein Verzeichnis, dann liegt da alles nötige drin.
Dann mußt Du noch den Suchpfad für Python anpassen (via $PYTHONPATH oder im configure-Skript von PyQt4).

Für die Skripte, die Deine lokale PyQt-Installation nutzen sollen, passt Du den Suchpfad am besten so an, das Deine Version vor einer evtl. systemweiten PyQt-Version gefunden wird, um Überraschungen zu vermeiden (händisch im Skript oder einfacher per bash-alias).
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

danke, sipconfig.py liegt bei mir im root verzeichnis der installation. das habe ich PYTHONPATH übergeben und erneut versucht configure.py von PyQt auszuführen. Ich erhalte wieder die Fehlermeldung (etwa) "sip muss installiert sein, um pyqt zu installieren"

ich habe mir die sipconfig.py angeschaut, dort stehen die pfadangaben, die ich angegeben habe, als ich das sip configure.py ausgeführt habe. deshalb gehe ich davon aus, daß die installtion von sip erfolgreich war.

warum erkennt das pyqt bloß nicht?
Zuletzt geändert von 4bit am Mittwoch 25. November 2009, 11:53, insgesamt 1-mal geändert.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

ich versuche gerade sip --help aufzurufen. darauf bekomme ich selbst, wenn ich in das Verzeichnis ("Bindir" bei mir) wechsle wo die datei liegt, die Meldung
bash: sip: command not found
wie ist das denn möglich, wenn die datei doch offensichtlich existiert?

pyqt und sip zu installieren wird immer mehr zu einer reise in ein unüberschaubares labyrinth
Zuletzt geändert von 4bit am Mittwoch 25. November 2009, 11:54, insgesamt 1-mal geändert.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

@jerch
die datei sipconfig.py gibt es zwei mal: einmal im root Verzeichnis und einmal im Destdir. Nach kurzem überfliegen kann ich keinen Unterschied feststellen, deshalb gehe ich davon aus, das es egal ist welchen der beiden Pfade ich bei der qt installation angebe (ich bekomme auch beides mal die gleiche fehlermeldung)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Keine Ahnung, was Du da machst, aber nach folgendem Schema sollte es eigentlich funktionieren:

Code: Alles auswählen

-PyQt + sip von Webseite downloaden und entpacken

-Zielordner anlegen (da kommt einfach beides rein)
#>mkdir /home/user/Desktop/pyqt_neu/ziel

-sip installieren
#>cd /home/user/Desktop/pyqt_neu/sip-4.10-snapshot-20091123
#>python configure.py -b /home/user/Desktop/pyqt_neu/ziel -d /home/user/Desktop/pyqt_neu/ziel \
> -e /home/user/Desktop/pyqt_neu/ziel -v /home/user/Desktop/pyqt_neu/ziel
#>make
#>make install

-pyqt installieren
#>cd /home/user/Desktop/pyqt_neu/PyQt-x11-gpl-4.7-snapshot-20091123
#>PYTHONPATH='/home/user/Desktop/pyqt_neu/ziel' python configure.py -b /home/user/Desktop/pyqt_neu/ziel \
> -d /home/user/Desktop/pyqt_neu/ziel -p /home/user/Desktop/pyqt_neu/ziel
#>make
-3 tage später wiederkommen ;)
#>make install

-testen
#>PYTHONPATH='/home/user/Desktop/pyqt_neu/ziel/' python
>>> from PyQt4.Qt import PYQT_VERSION_STR
>>> PYQT_VERSION_STR
'4.7-snapshot-20091123'
>>> app=QtGui.QApplication([])
>>> win=QtGui.QWidget()
>>> win.show()
>>> app.exec_()

funktioniert.
Damit das Ganze überhaupt was wird, musst Du natürlich die QT-Libs samt Headerdateien installiert haben. Um welche Distribution handelt es sich eigentlich?
Falls QT nicht installiert ist, fängt Dein Spiel noch weiter vorne an und Du solltest vllt. den Admin fragen, ob er es nicht einfacher per Paketmanager installiert. (Die ganzen build-Tools und abhängigen Bibliotheken willst Du sicher nicht in Deinem Homeordner liegen haben, wäre aber auch möglich)

Grüße, jerch
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

danke, das sieht sehr nützlich aus.

langsam wird mir klar, was hier vor sich geht.
Es hat alles damit angefangen, daß die imports
import sipconfig
import PyQt4
jeweils sinngemäß den Fehler "Module können nicht gefunden werden" ausgegeben haben.
Daraus habe ich sofort geschlossen, daß sie nicht zentral installiert sein können, sonst wären die Verzeichnisse doch bestimmt im sys.path enthalten.
Da die Admins an meiner Uni Python nicht nutzen, und dessen installation Teil des Standardpackets des betriebssystems war, konnten sie mir nicht bei der installation von zentraler Stelle helfen. Da sonst niemand nach PyQt gefragt hat, sollte ich es lokal installieren.

Mir scheint die Verwendung von "sys.path" nicht ganz klar zu sein. Zunächst einmal scheinen Unterverzeichnisse einer Pfadangabe nicht automatisch mitdurchsucht zu werden. Zweitens: was passiert, wenn es mehrere dateien mit denselben Namen in verschiedenen Pfadangaben gibt? Gibt es bevorzugte Pfade?

Denn, wenn ich python configure ausführe erhalte ich den Fehler "sip version ist zu alt", obwohl meine neu installierte version neu genug ist. Beim Durchsuchen der Pfadangaben in sys.path habe ich jetzt tatsächlich eine alte Version von sipconfig gefunden. Sie liegt im Verzeichnis Python2.3 und ist tatsächlich zu alt. Trotzdem gibt "import sipconfig" den "nicht gefunden" Fehler zurück. import sipconfig ist erst dann erfolgreich, wenn ich den Pfad meiner neu installierten version angebe.

Dieses ganze Pfad Thema macht auf mich einen ziehmlich konfusen Eindruck. sys.path scheint nicht die einzige Liste zu sein und beim ausführen von configure.py werden vermutlich neue pfade dazugenommen (woher kommen die?) und eventuell andere herausgenommen.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

4bit hat geschrieben:Da die Admins an meiner Uni Python nicht nutzen, und dessen installation Teil des Standardpackets des betriebssystems war, konnten sie mir nicht bei der installation von zentraler Stelle helfen. Da sonst niemand nach PyQt gefragt hat, sollte ich es lokal installieren.
Also wenn es sich bei dem OS nur um eine Grundinstallation handelt, kann der Aufwand, es lokal zu installieren hanebüchen werden. Höchstwahrscheinlich fehlen Dir dann komplett die dev-Pakete für Python, QT, zusätzliche Libs und die build-Tools (gcc, make etc.) Ich würde hier in jedem Falle mit einem Admin reden und ihn bitten, das entsprechend systemweit zu installieren. Das lokale händische Aufsetzen der build-Umgebung passend zu den installierten Libs ist kein Spaß.
4bit hat geschrieben:Mir scheint die Verwendung von "sys.path" nicht ganz klar zu sein. Zunächst einmal scheinen Unterverzeichnisse einer Pfadangabe nicht automatisch mitdurchsucht zu werden. Zweitens: was passiert, wenn es mehrere dateien mit denselben Namen in verschiedenen Pfadangaben gibt? Gibt es bevorzugte Pfade?
Unterverzeichnisse werden Python mit einer __init__.py als "Pythonordner" bekanntgemacht und sind dann via import mit Ordnername.Pythonskript verfügbar. Ordner ohne __init__.py durchsucht Python nicht. Eine Bevorzugung gibt es durchaus, first come first shot, also analog zur $PATH-Variable.
4bit hat geschrieben:...
import sipconfig ist erst dann erfolgreich, wenn ich den Pfad meiner neu installierten version angebe.
Die Shellvariable PYTHONPATH wird vor die anderen Einträge in sys.path gesetzt (genauer hinter egg-Pfade, vor statische Pfade), damit kannst Du Python also Deinen Pfad aufzwingen.

Funktionierts denn mit der Schritt-für Schritt-Anleitung?
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Bei der Schritt für Schritt Anleitung läuft etwas schief. Nachdem ich die configure.py ausgeführt habe erhalte ich bei make zahlreich Fehler der Form:
  • siplib.c:8740: error: expected ‘;’ before ‘sipSimpleWrapper_getwritebuffer’
    siplib.c:8743: error: ‘sipClassTypeDef’ has no member named ‘ctd_segcount’
    siplib.c:8747: error: ‘sipWrapperType’ has no member named ‘super’
    siplib.c:8747: error: ‘getsegcountproc’ undeclared (first use in this function)
    siplib.c:8747: error: expected ‘;’ before ‘sipSimpleWrapper_getsegcount’
    siplib.c:8750: error: ‘sipClassTypeDef’ has no member named ‘ctd_charbuffer’
    siplib.c:8754: error: ‘sipWrapperType’ has no member named ‘super’
    siplib.c:8754: error: ‘getcharbufferproc’ undeclared (first use in this function)
    siplib.c:8754: error: expected ‘;’ before ‘sipSimpleWrapper_getcharbuffer’
    siplib.c:8760: error: expected expression before ‘)’ token
Die erste Frage: ich habe meine vorigen Installationsversuche einfach in den Mülleimer geworfen und die Distributionen nachmals entpackt. Normalerweise ist das keine richtige Deinstallation, liege ich trotzdem richtig, daß es in diesem Fall erlaubt ist, oder sollte ich weitere Schritte durchführen um die beiden alten Installationsversuche zu entfernen?

zweitens habe ich festgestellt, daß in /usr/lib 3 Versionen von python installiert sind:
  • python2.3
    python2.4
    python2.5
Zum Skripte schreiben nutze ich IDLE von Python2.5, im shell Fenster führt der Befehl python aber python2.3 aus (das erklärt wahrscheinlich, warum "import sipconfig" in IDLE einen Fehler verursacht aber "python configure.py" eine alte version von SIP gefunden hat.)
Um python2.5 aufzurufen nutze ich deshalb "python2.5 configure.py"
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Habe gerade die Schritt für Schritt Anleitung mit python anstatt python2.5 ausgeführt und siehe da die fehler verschwinden. mir sind die zusammenhänge nicht klar. bei der pyqt installation erhalte ich jedoch den Fehler
  • Determining the layout of your Qt installation...
    Error: Failed to determine the layout of your Qt installation. Try again using
    the --verbose flag to see more detail about the problem
.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Poste mal den ersten Fehler, die von Dir aufgezeigten scheinen Folgefehler zu sein. (Missing Python.h? ;) )

3 Versionen nebeneinander? Ist die Distribution ein Debian Etch?

Ich meine die Fehler aus Deinem vorigen Post. Von Python 2.3 würde ich abraten.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Also mit der python version 2.4.4 läuft qt, d.h. "import qt" gibt keinen Fehler. Eigentlich wollte ich "import PyQt4" verwenden, da ich nicht weiß welche Unterschiede genau bestehen denke ich, ich werde jetzt mit dem Programm beginnen, bevor ich noch mehr Zeit in Installation stecke.

Oder gibt es Gründe, die gegen python2.4.4 und qt und für python2.5 und PyQt4 sprechen?

Grüße und Danke für die Unterstützung.

4bit.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

qt steht halt für das alte Qt3. Musst Du wissen, ob Dir das reicht, ich würde es nicht mehr für neue Programme einsetzen.

Wenn Du mir ein wenig mehr über die Distribution verraten würdest, könnte ich Dir vllt. auch helfen, die Binary-Pakete lokal zu installieren.

Deine letzte Fehlermeldung (qt-layout-Dingens) bedeutet höchstwahrscheinlich, daß qt4 nicht installiert ist. Dann müßtest Du dieses erst lokal installieren und dann PyQt4 dagegen linken.

Addendum:
Vllt. wär die Sache auch mit einem anderen GUI-Toolkit einfacher, Ubuntu z.B. setzt stark auf Gtk, da ist das Python-binding in der Grundinstallation enthalten.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Hi Jerch,
späte Antwort, weil ich die letzten Tage nicht mit der Python Installation weitermachen konnte. Hab grade auf meinem Computer zuhause (windows XP) python2.64 und PyQt-Py2.6-gpl-4.6.2-2 installiert. Also werde ich an der uni mit python2.3 und qt programieren und zuhause eben die neusten Versionen benutzen. Falls sich noch gute Gründe ergeben nachzurüsten und dein Angebot dann noch steht würde ich gerne drauf zurückkommen!

Noch eine Frage nach Eurer Meinung. Ich benutze eigentlich die Python IDLE, würde aber gern mal einen richtigen Editor verwenden. Für Windows sind die folgenden anscheinend recht verbreitet:
  • Stani's Python Editor (SPE IDE) 0.83
    Komodo
    Eclipse mit PyDev
    WingIde
    Spyder
    Pyscripter
Welcher davon ist denn eurer Meinung nach für Anfänger gut geeignet? Eclipse hab ich ausprobiert, bin aber schon an der installation von Pydev gescheitert.
Und Pyscripter ist anscheinend nicht mit python2.64 kompatibel. Fallen schonmal zwei weg.

Grüße,
4bit.
Antworten