Namespace packages: pkg_resources vs. pkgutil
Hallo, ich habe mir kürzlich zope.interface angesehen. Dabei ist mir aufgefallen, dass hier namespace packages verwendet werden (sinnvoll). Gleichzeit gibt es dort aber einen except-Handler für den Fall, dass setuptools nicht installiert ist: | # this is a namespace package | try: | import pkg_resources | pkg_resources.declare_namespace(__name__) | except ImportError: | import pkgutil | __path__ = pkgutil.extend_path(__path__, __name__) Meine Frage ist, ob pkgutil tatsächlich namespace packages emulieren kann, so wie ich das aus dem obigen Code entnehme. Welche Gründe gäbe es aber dann, nicht immer nur pkgutil zu verwenden? Vielen Dank fs
On Saturday 05 April 2008 22:14:05 Felix Schwarz wrote:
Hallo,
ich habe mir kürzlich zope.interface angesehen. Dabei ist mir aufgefallen, dass hier namespace packages verwendet werden (sinnvoll). Gleichzeit gibt es dort aber einen except-Handler für den Fall, dass setuptools nicht
installiert ist: | # this is a namespace package | try: | import pkg_resources | pkg_resources.declare_namespace(__name__) | except ImportError: | import pkgutil | __path__ = pkgutil.extend_path(__path__, __name__)
Meine Frage ist, ob pkgutil tatsächlich namespace packages emulieren kann, so wie ich das aus dem obigen Code entnehme. Welche Gründe gäbe es aber dann, nicht immer nur pkgutil zu verwenden?
Also so wie ich das sehe ist der Unterschied der, das ersteres mit eggs funktioniert, und diese laut [1] auch teil mehrerer namespaces sein koennen. Es ist also flexibler, und ein bisschen polierter. MfG Diez [1]: http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
Hallo Diez, Diez B. Roggisch schrieb:
Also so wie ich das sehe ist der Unterschied der, das ersteres [pkg_resources im Ggs. zu pkgutil] mit eggs funktioniert, und diese laut [1] auch teil mehrerer namespaces sein koennen.
Vielen Dank für deine Hilfe, das klingt schlüssig. Dann wäre der zope.interface-Fallback tatsächlich gut geeignet, um in einigen Situationen eine Abhängigkeit zu setuptools zu vermeiden. fs
Felix Schwarz schrieb:
Diez B. Roggisch schrieb:
Also so wie ich das sehe ist der Unterschied der, das ersteres [pkg_resources im Ggs. zu pkgutil] mit eggs funktioniert, und diese laut [1] auch teil mehrerer namespaces sein koennen.
Vielen Dank für deine Hilfe, das klingt schlüssig. Dann wäre der zope.interface-Fallback tatsächlich gut geeignet, um in einigen Situationen eine Abhängigkeit zu setuptools zu vermeiden.
Was hast du damit gewonnen? Beide Module sind nicht in der Standardbibliothek, bedeuten also also die gleichen Hürden für die Installation. Ich würde sogar sagen, dass die setuptools mittlerweile fast überall wo Python installiert ist, vorhanden sind. Wenn du allerdings sowieso schon die Zope Infrastruktur nutzt, dann macht es evtl. Sinn. Chris
Hallo Christopher, Christopher Arndt schrieb:
Felix Schwarz schrieb:
Vielen Dank für deine Hilfe, das klingt schlüssig. Dann wäre der zope.interface-Fallback tatsächlich gut geeignet, um in einigen Situationen eine Abhängigkeit zu setuptools zu vermeiden.
Was hast du damit gewonnen? Beide Module sind nicht in der Standardbibliothek,
Das sehe ich anders: http://www.python.org/doc/2.3.5/lib/module-pkgutil.html
Ich würde sogar sagen, dass die setuptools mittlerweile fast überall wo Python installiert ist, vorhanden sind. Wenn du allerdings sowieso schon die Zope Infrastruktur nutzt, dann macht es evtl. Sinn.
Im konkreten Fall geht es um das python-zope-interface Paket in Fedora Linux. Hier ging es mir darum, möglichst wenig unnötige Abhängigkeiten in das RPM zu kodieren, da diese erzwungen werden und ich somit X (X groß) Benutzern setuptools aufnötigen würde, selbst wenn diese das gar nicht benötigen. fs
Felix Schwarz schrieb:
Christopher Arndt schrieb:
Was hast du damit gewonnen? Beide Module sind nicht in der Standardbibliothek,
Das sehe ich anders: http://www.python.org/doc/2.3.5/lib/module-pkgutil.html
Hmm, das ist komplett an mir vorüber gegangen. Naja, man lernt halt immer wieder was dazu! ;-) Chris
participants (3)
-
Christopher Arndt
-
Diez B. Roggisch
-
Felix Schwarz