Eigenes Modul einbinden

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.
Antworten
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Hallo,
ich habe zwei py dateien, jetzt will ich die eine, in der eine Instance ist
importieren, sodass ich diese Instance verwenden kann..
wie kann man so etwas machen??
schon mal vielen Dank.

viele liebe Grüße

Teabag
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

[wiki]Import[/wiki]
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

ordner:
     datei1.py
     datei2.py
datei1.py:

Code: Alles auswählen

import sys
sys.path.insert(0, '')
import datei2
abgdf

Mann, Teabag, Deine Fragen werden immer raffinierter ...
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

SchneiderWeisse hat geschrieben:

Code: Alles auswählen

ordner:
     datei1.py
     datei2.py
datei1.py:

Code: Alles auswählen

import sys
sys.path.insert(0, '')
import datei2
Wozu sys.path.insert, geht doch eh automatisch.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

meines Wissens nicht immer... zumindest ging es bei mir schonmal nicht. Und da es ja nicht besonders viel Code ist, schadet es sicher nicht. Sonst könnte es sein, dass evtl. auf einem anderen System nicht funktioniert.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

SchneiderWeisse hat geschrieben:meines Wissens nicht immer...
Anderen Wissens schon.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

SchneiderWeisse hat geschrieben:meines Wissens nicht immer... zumindest ging es bei mir schonmal nicht. Und da es ja nicht besonders viel Code ist, schadet es sicher nicht. Sonst könnte es sein, dass evtl. auf einem anderen System nicht funktioniert.
*seufz* Das erinnert mich an Windows-User und ihre planlosen Spielereien an der Registry. Allerdings ist das dort sogar verständlicher, weil fast nichts dokumentiert ist. Das Importsystem dagegen hat ein definiertes und dokumentiertes Verhalten, und wenn es auf einem System funktioniert, dann tut es das auch auf einem anderen.

Also, die wichtigen Punkte sind die:
  • Der Pfad des ausgeführten Moduls (x.py beim Aufruf "python x.py") ist automatisch in sys.path. Nicht dagegen das Arbeitsverzeichnis ("working directory") des Prozesses.
  • Mit der Umgebungsvariable PYTHONPATH lassen sich, wie auch zur Laufzeit mit "sys.path.append/insert", weitere Pfade angeben.
  • Weitere Pfade in sys.path sind installationsabhängig (z.B. Python2x\Lib unter Windows, /usr/lib/python2.x unter Unix).
  • Dazu drängeln sich auch installierte Eggs in sys.path.
Also: angenommen die Module heißen "ordner/datei1.py" und "ordner/datei2.py", dann funktioniert ein "import datei2" innerhalb "datei1.py" auf jeden Fall, wenn der Aufruf mit "python datei1.py" erfolgt, egal aus welchem Verzeichnis heraus.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
lunar

birkenfeld hat geschrieben:*seufz* Das erinnert mich an Windows-User und ihre planlosen Spielereien an der Registry. Allerdings ist das dort sogar verständlicher, weil fast nichts dokumentiert ist.
Naja, es ist oft genug schon dokumentiert, aber halt eben auf der MSDN-Seite ... ;)
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

naja, ich kann nur sagen, dass es eben bei mir und auch anderen Systemen nicht funktioniert hat. Da könnt ihr mir hier noch oft sagen, dass es so sein sollte, es war eben nicht so und das Problem wurde mit sys.path.insert gelöst. Und wenn der Code evtl. auch bei Leuten funktionieren sollte, die keine Computer Kenntnisse haben, finde ich diese zwei Zeilen mehr sinnvoll als störend.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, Voodoo-Code nur für den Fall zu schreiben ist ja genau was man haben will.

Im Ernst: Statt solche Tipps zu geben, solltest du besser herausfinden, warum es bei dir nicht funktioniert hat.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Leute die keine Computerkenntnisse haben, sollten sie sich vielleicht aneignen, bevor sie anfangen zu Programmieren. ;-)
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

http://www.python-forum.de/topic-12648.html

gut, dass es bei einer Standard-Debian Installation mit mod_python (mit apt-get install) so nicht funktioniert hat...

Ich hatte ja nicht gesagt, dass man es machen muss, sondern dass es manchmal evtl. nötig sein könnte. Und für den Anfang ist es doch nicht schlecht, wenn man dieses Problem gleich kennt, dann macht man sich später nicht unnötig Gedanken darüber, dass es nicht funktioniert.

Ich verstehe nicht, warum man auf so einer kleinlichen Sache so lang rumtrampeln muss...
BlackJack

Weil anscheinend einige Leute das nicht als kleinliche Sache ansehen, sondern als ziemlich Übel wenn man solchen Quatsch Anfängern erzählt.

Im Übrigen denke ich, dass das auch in dem anderen Thread nicht *die* Lösung war. In Deinem `sys.path` stand als erstes ein '(\\.py$)/' statt des üblichen '', d.h. da hat irgend wo ein Skript oder eine Konfigurationsdatei Mist gebaut und das sollte man *an der Stelle* reparieren und nicht durch den "Hack" mit dem `insert()`.
lunar

SchneiderWeisse hat geschrieben:http://www.python-forum.de/topic-12648.html

gut, dass es bei einer Standard-Debian Installation mit mod_python (mit apt-get install) so nicht funktioniert hat...
Tja, mod_python ist nun etwas *ganz besonderes* ... ;)

mod_python führt Python-Dateien offenbar nicht aus, sondern lädt sie in einen eingebetteten Python-Interpreter. Das sys.path in diesem Fall anders aussieht, ist zu erwarten. In diesem Fall ist eine Manipulation von sys.path sinnvoll.
Ich hatte ja nicht gesagt, dass man es machen muss, sondern dass es manchmal evtl. nötig sein könnte. Und für den Anfang ist es doch nicht schlecht, wenn man dieses Problem gleich kennt, dann macht man sich später nicht unnötig Gedanken darüber, dass es nicht funktioniert.

Ich verstehe nicht, warum man auf so einer kleinlichen Sache so lang rumtrampeln muss...
Naja, Manipulationen an sys.path können auch ins Auge gehen und dazu führen, dass "magische" Import- oder AttributeErrors auftreten. Insofern sollte man darauf nur dann zurückgreifen, wenn es wirklich nötig ist.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

naja, ich hatte damals eben euch geglaubt und das so hingenommen... (dann wurde mir eben damals von euch Mist erzählt...;)) Das mit falscher Konfiguration ist eigentlich unmöglich, da ich lediglich den apache2 und mod-python installiert habe auf einem Test-Rechner zuhause.
BlackJack

Wo kommt das '(\\.py$)/' im `sys.path` her? Das ist sieht sehr komisch aus und gehört da nicht hin. Da *ist* irgendwo was schief gelaufen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:mod_python führt Python-Dateien offenbar nicht aus, sondern lädt sie in einen eingebetteten Python-Interpreter. Das sys.path in diesem Fall anders aussieht, ist zu erwarten. In diesem Fall ist eine Manipulation von sys.path sinnvoll.
Ja, aber auch dann sollte man vorher schauen was drin ist, statt auf Verdacht $random_path in den sys.path einzugeben in der Hoffnung dass es dann tut.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

naja, so oder so weiß ich jetzt, dass anscheinend nicht an mir lag, sondern an mod_python... und meine Aussage somit nicht ganz falsch war.

Danke!
MfG
Antworten