Wie kann ich ein Python-Erweiterungsmodul machen wie ein Ei ladbaren verpackt, ohne es zu installieren?

StackOverflow https://stackoverflow.com/questions/737383

Frage

Ich bin in der Mitte unseres Build-Skripte von Nacharbeiten werden basierend auf das wunderbare Waf-Tool (ich habe Nutzung SCons für Alter, aber es ist nur Weg zu langsam).

Wie auch immer, ich habe die folgende Situation getroffen und ich kann nicht eine Lösung für sie finden:

  • Ich habe ein Produkt, das auf einer Reihe von zuvor gebaut Ei Dateien abhängig ist.
  • Ich versuche, das Produkt zu verpacken mit PyInstaller als Teil des Build-Prozesses.
  • Ich baue die Abhängigkeiten zuerst.
  • Als nächstes möchte ich PyInstaller ausführen, um das Produkt zu verpacken, die auf den Eiern hängt ich gebaut. Ich brauche PyInstaller in der Lage sein, diese Ei-Dateien als Teil der Verpackung geeignet Prozess zu laden.

Das klingt einfach: Sie herausfinden, was PYTHONPATH sollte sein, eine Kopie sys.environ die Variable korrekt, das Setzen konstruieren und dann die die zuvor konfigurierte Umgebung wie das env Argument übergeben PyInstaller Skript subprocess.Popen aufrufen

.

Das Problem ist, dass PYTHONPATH Einstellung allein nicht genug zu sein scheint, wenn die Eier Sie hinzufügen Erweiterungsmodule sind, die als zipsafe verpackt sind. In diesem Fall stellt sich heraus, dass die eingebetteten Bibliotheken importiert werden nicht in der Lage sind.

Wenn ich die Eier (Umbenennung der Verzeichnisse .egg) entpacken, ich kann sie ohne weitere Einstellungen importieren, aber das ist nicht das, was ich in diesem Fall will.

Ich kann auch die Eier bekommt von einer Subshell importieren, indem Sie folgendermaßen vorgehen:

  • Einstellung PYTHONPATH in das Verzeichnis, das Ei Sie importieren möchten (nicht der Weg des Eies selbst)
  • Laden ein Python-Shell und mit pkg_resources.require das Ei zu finden.

Sobald dies geschehen ist, werden die Eier Lasten als normal. Auch dies ist nicht praktikabel, weil ich, wo es bereit ist, zu importieren, diese Eier aus dem Off müssen in der Lage meiner Python-Shell in einer Art und Weise ausgeführt werden.

Die schmutzige Option zur Ausgabe eines Wrapper-Skript, das die oben genannten Aktionen haben würde, bevor das eigentliche Ziel Skript aufrufe, aber dies scheint wie das Falsche zu tun. Es muss ein besserer Weg, dies zu tun

War es hilfreich?

Lösung

Heh, ich denke, das war mein schlecht. Das Problem scheint gewesen zu sein, dass die zipsafe Flagge in setup.py für das Erweiterungspaket auf False festgelegt wurde, die Ihre Fähigkeit zu beeinflussen scheint es, als solche zu behandeln, überhaupt nicht.

Nun, da ich gesetzt habe auf True, dass ich die Ei-Dateien importieren kann, indem einfach jeden zum PYTHONPATH hinzuzufügen.

ich hoffe, jemand anderes findet diese Antwort nützlich ein Tag!

Andere Tipps

Auch wenn Sie eine Lösung haben, können Sie immer versuchen, „virtualenv“, das eine virtuelle Umgebung von Python erstellt, wo Sie und Test Python-Pakete installieren können mit dem Kernsystem Python ohne Unordnung:

http://pypi.python.org/pypi/virtualenv

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top