Package importieren

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
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Dienstag 24. Juni 2008, 13:11

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
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Dienstag 24. Juni 2008, 13:17

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.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 24. Juni 2008, 13:20

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
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Dienstag 24. Juni 2008, 13:21

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 :)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 24. Juni 2008, 13:22

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/
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Dienstag 24. Juni 2008, 14:34

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 24. Juni 2008, 15:11

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Dienstag 24. Juni 2008, 15:20

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...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 24. Juni 2008, 15:21

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 24. Juni 2008, 15:29

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Mittwoch 25. Juni 2008, 08:11

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
Antworten