[Python-de] Globaler "prefix" o.ae.

Ole Streicher ole-usenet-spam at gmx.net
Mo Sep 12 09:56:39 CEST 2011


Hartmut Goebel <h.goebel at goebel-consult.de> writes:
> Am 11.09.2011 18:14, schrieb Ole Streicher:
>> Hartmut Goebel<h.goebel at goebel-consult.de>  writes:
>>> Natürlich. Denn Du hast Module (oder Packages) "common" "databases",

Es sind packages: Ein module ist (vereinfacht) eine Datei, während ein
package eine Sammlung von modules ist.

>>> etc. Aber es gibt keine Package "mypackage". Damit hast Du eine
>>> Sammlung von Modulen, aber eben kein Package.

Ein package ist aber genauso definiert: als eine Collection von
Modulen. Dass das Design nicht perfekt ist, ist ja von mir unbestritten,
aber es genügt den formalen Anforderungen an ein package.

>> In dem Augenblick, in dem ich eine (auch leere) mypackage/__init__.py
>> anlege, habe ich ein Package.
>
> Ja, aber common, database, etc. sind eben weiterhin einzelne Module (oder
> Packages). Nur weil Du sie nach mypackage/ verschiebst, macht sie noch nicht
> zu einem Teil von mypackage. Siehe Desgin-Fehler.
>
> Nur weil ich meinen VW in einer Mercedeswerkstatt reparieren lasse, ist es
> noch immer kein Mercedes.

... womit mal wieder gezeigt ist, dass Autovergleiche meistens hinken:
eine Handvoll pythonmodule in ein Verzeichnis gepackt und eine leere
__init__.py angelegt macht daraus ein package, egal wie gut oder wie
schlecht die Pakete auch sein mögen.

>>> Jede "Lösung" (besser gesagt: Hack) wird Nebenwirkungen haben.
>> Welche Hacks (bzw. Lösungen) gäbe es denn noch so und welche
>> Nebenwirkungen wären zu erwarten? Vielleicht findet sich ja doch ein
>> brauchbarer Kompromiss.
>
> Es läuft immer daraus hinaus, dass Du das Modul mypackages.common irgendwie
> als common in den Namespace bekommen musst. Und damit kannst Du in diesem
> Programm kein anderes Modul `common` mehr importieren.

Solange man den namespace lokal halten kann (also nur innerhalb von
common und database) wäre das ja kein Problem. 


Mehr Informationen über die Mailingliste python-de