Seite 1 von 1

Package importieren

Verfasst: Dienstag 24. Juni 2008, 13:11
von da.dom
HuHu (ich schon wieder),

wenn ich ein fremdes Package nutzen will, hab ich gelesen das man es installieren sollten etc. . Wenn ich mich aber bewusst dagegen entscheide und das Package direkt in mein Projekt mit einbinden will, wie importiere ich das dann?

Hab das Package: simplejson-1.9.1.tar.gz
jetzt würde ich so was machen wollen: import simplejson-1.9.1.tar.gz

Geht das irgendwie, oder muss ich das über eine Installation durchführen
`
Grüße
D

Verfasst: Dienstag 24. Juni 2008, 13:17
von audax
Du könntest mit dem tarfile Modul [ http://docs.python.org/lib/module-tarfile.html ] das Archiv auslesen und in ein temporäres Verzeichnis entpacken, dieses zu sys.path hinzufügen und dann das Modul importieren.

Verfasst: Dienstag 24. Juni 2008, 13:20
von CM
Das klingt nach einem gepackten und komprimierten Verzeichnis. Da kann alles Mögliche drin sein. Auch PDFs, Bilder, etc.. Wie soll Python oder eine andere Sprache das importieren sollen?

Also erstmal entpacken. Unter *NIX etwa so:

Code: Alles auswählen

$ cd Verzeichnis Deiner Wahl
$ cp Downloadverzeichnis/simplejson-1.9.1.tar.gz .
$ tar xvf simplejson-1.9.1.tar.gz 
$ cd simplejson # ???
Und dann die Anleitung oder das README lesen ...

HTH
Christian

Verfasst: Dienstag 24. Juni 2008, 13:21
von shakebox
also so wird das auf jeden Fall nicht gehen. Denn .tar.gz ist ja ein komprimiertes Archiv. Waere ja auch doof wenn bei jedem import erstmal alles dekomprimiert werden muesste.

Auspacken musst Du es also auf jeden Fall. Eigentlich sollte dann auch ein Ordner uebrigbleiben, der vermutlich simplejson heisst, oder sowas. Dieses Package kannst Du natuerlich dann mit 'import simplejson' importieren. Nur muss Python das dann auch finden koennen. Dazu gibt es verschiedene Moeglichkeiten:

Wenn das Package im gleichen Ordner liegt wie Dein eigentliches Programmscript sollte es direkt automatisch gefunden werden. Du kannst aber z.B., sofern Du auf nem Unix-aehnlichen System arbeitest (Linux, OS X, usw.), mit einer Umgebungsvariable "PYTHONPATH" einen oder mehrere Ordner angeben, die beim import nach den betreffenden Modulen durchsucht werden.

Soweit mal meine 2ct, Fundierteres kommt sicher noch von den Cracks hier :)

Verfasst: Dienstag 24. Juni 2008, 13:22
von CM
audax hat geschrieben:Du könntest mit dem tarfile Modul [ http://docs.python.org/lib/module-tarfile.html ] das Archiv auslesen und in ein temporäres Verzeichnis entpacken, dieses zu sys.path hinzufügen und dann das Modul importieren.
Prinzipiell schon, aber da ist so ein blödes C-file, das kompiliert sein will ...


PS
Ich nehme an gemeint ist http://pypi.python.org/pypi/simplejson/

Verfasst: Dienstag 24. Juni 2008, 14:34
von audax
CM hat geschrieben:
audax hat geschrieben:Du könntest mit dem tarfile Modul [ http://docs.python.org/lib/module-tarfile.html ] das Archiv auslesen und in ein temporäres Verzeichnis entpacken, dieses zu sys.path hinzufügen und dann das Modul importieren.
Prinzipiell schon, aber da ist so ein blödes C-file, das kompiliert sein will ...
Hm. Dann schreibt man also entweder nen C-Compiler in Python und kompilierts damit...oder man kompilierts vor. Oder man liefert den gcc und kompiliert es bei jedem Programmstart neu :D

Verfasst: Dienstag 24. Juni 2008, 15:11
von Leonidas
Hint: Man kann Module aus Zipfiles importieren. Überlegt mal, was Python Eggs eigentlich sind.

Außerdem ist es doch gar kein Problem, das Archiv zu entpacken und zu importieren.

Verfasst: Dienstag 24. Juni 2008, 15:20
von da.dom
Leonidas hat geschrieben:Hint: Man kann Module aus Zipfiles importieren. importieren.
Genau das würde ich gerne tuen. Hab das File ausgepackt, hab mir den Ordner "simplejson" genommen (da liegen die ganzen py Dateien drin inklusive der init Dateien) und gezppt (im Zip, also ein Ordner "simpleJson" und darin die ganzen Dateien) und habe das zu meinen eigenen Datein gepackt... aber wie importiere ich das jetzt?

import simplejson

quittiert er mir mit einem Fehler...

Verfasst: Dienstag 24. Juni 2008, 15:21
von CM
Und wie importiere ich ein in C geschriebenes Modul ohne es zu kompilieren? Kompiliert wird es (wahrscheinlich - habe ich bei diesem Modul nicht ausprobiert) beim Installieren.

Ok, man kann natürlich lokal kompilieren und dann importieren. (Man auch den Krempel dann auch wieder packen, wenn einem der Sinn danach steht. ;-) ) So käme man um die Installation herum.

edit: Arrgh - sehe gerade, dass Bob da

Code: Alles auswählen

except ImportError:
    pass
geschrieben hat. Ok, denn muß man nichts kompilieren ...

Tut mir leid so viel Verwirrung gestiftet zu haben.

Verfasst: Dienstag 24. Juni 2008, 15:29
von Leonidas
CM hat geschrieben:Ok, man kann natürlich lokal kompilieren und dann importieren. (Man auch den Krempel dann auch wieder packen, wenn einem der Sinn danach steht. ;-) ) So käme man um die Installation herum.
Ganz recht, die Eggs können auch kompilierte C-Module enthalten.

Verfasst: Mittwoch 25. Juni 2008, 08:11
von da.dom
Das mit den Zip-File geht bei mir nicht. Hab simpleJson ausgepackt, 2 Installations Scripte ausgeführt, dann spuckt er einen ominösen Ordner build-Ordner aus mit zwei Ordnern:

bdist.win32 und lib.win32-2.5

in dem lib-Ordner ist ein Ordner den ich für den richtigen halte "simplejson" da sind nur py-Files drin. Wenn ich den Ornder direkt neben mein eigenes Script packe, funktioniert es, aber das will ich ja nicht. Will das ganze als ZIP eingebunden habe, im Idealfall sogar (tut mir leid: "JavaProjekt-Like") in einem seperaten Ordner.

Wenn ich das ganze von Eclipes (PyDev) über die Projekt-Optionen einhänge, funktioniert es (also am zip kann es nicht liegen), keine Ahnung wie das Plugin das mache. Würde trotzdem gerne wissen wie ich das ganze von Hand hinbekomme :)

Hier noch mal was ich will: ProjektStruktur:

Projekt
--src (Java Sourcen)
--src/cgi (Python Sourcen)
--lib (hier sollen die ZIPs mit externen Modulen rein