[Python-de] Namespace-Packages in Python 2.x

Diez B. Roggisch deets at web.de
Mo Okt 5 17:39:42 CEST 2015


Hallo Chris,


> On 05 Oct 2015, at 17:04, Christopher Arndt <chris at chrisarndt.de> wrote:
> 
> Am 05.10.2015 um 15:01 schrieb Diez B. Roggisch:
>> Das ist mir bekannt, dass das geht - aber wir heben gerade unser uraltes
>> eingebettetes Python 2.5 auf immerhin 2.7.
> 
> Wenn ihr ein embedd Python benutzt, könnt ihr dann nicht einfach das
> pkgutil-Modul mit einer gefixten Version austauschen?

Oh klar können wir. Ist halt ein so offensichtlicher Fehler, dass ich da mal nachhaken wollte.

Ausserdem ist sowas immer doof, wenn man ein Changeset fuer Python selbst maintainen muss.

Und gerade im akuten Fall ist zB die Komplexität von Python3 in diesem Bereich *massiv* höher (ohne das fuer uns was rausspringt - geht immer noch nicht). 

Das ist nicht trivial, das zu pflegen.

> 
> Habt ihr denn in den __init__.py-Dateien überhaupt Code? Könnt ihr die
> nicht einfach als .py Dateien ausliefern?

Das ist unser Workaround, weil es im konkreten kein kritischer Code ist, den wir geschlossen halten wollen. Das gilt aber bei weitem nicht fuer allen, den wir schreiben - und da wäre das schon schön etwas zu haben, das funktioniert wie beworben ;)

> 
>> Es ist also deutlich einfacher fuer uns, die diversen Pakete aus
>> demselben Namensraum parallel vorzuhalten, und auch genau so in einen
>> Installer zu schieben.
> 
> Vasteh ich net. Also die Namespaces in eine flache Paketstruktur
> auflösen, oder was?

Na, das ist halt der Unterschied zwischen “klassischen” Namespace-Paketen und der Art, wie PIP damit umgeht.

Erstere benutzen (und daher komme ich/wir) eben pkgutil.extend_path und verteilen ein namespace-Paket auf viele Verzeichnisse.

PIP fusioniert die alle  - das siehst du in deinem site-packages: die EGG-INFOs werden top-level hingelegt, und zB unser abl-namespace ist nur ein Verzeichnis, und pip hat da alle Pakete reinkopiert.

Das ist natürlich etwas, dass wir auch machen können. Ist halt extra Aufwand, muss man wieder ne Logik fuer schreiben, die das entweder von alleine rausfummelt, oder es gibt wieder irgendwo ein magischen Ort, an dem das irgendwie explizit definiert wird. Und prompt vergessen, wenn man das nächste Stück Library dazupacken will.

LG Diez


Mehr Informationen über die Mailingliste python-de