Sag mal, hast Du echt spitze Ohren, oder ist das nur ein 'Spitzname'? Das würde mich jetzt echt interessieren. Gruß, Bernhard -----Original Message----- From: Thomas 'PointedEars' Lahn <PointedEars@web.de> Sender: python-de-bounces+bernhard.bockelbrink=gmx.de@python.org Date: Mon, 12 Sep 2011 21:55:33 To: <python-de@python.org> Reply-To: Thomas 'PointedEars' Lahn <usenet@PointedEars.de>, Die Deutsche Python Mailingliste <python-de@python.org> Subject: Re: [Python-de] Globaler "prefix" o.ae. Dinu Gherman wrote:
Daher würde ich zumindest es gerne sehen, wenn diese Geschichte an einem anderen Ort (vielleicht auf einer Debian-Liste?) ausge- tragen würde,
Du liest hier noch nicht lange mit, oder?
und, sofern eine Lösung existiert, diese dann hier bekannt gemacht würde.
Soifz. [psf 10.1] Eine mögliche Lösung habe ich doch schon erklärt. Für diejenigen, denen das jetzt immer noch nicht klar ist: *Wenn* man den Originalquelltext von Python-Paketen nicht ändern kann oder will, aber *trotzdem* Namenskollisionen mit bestehenden Paketen vermeiden will, muss man eben ein neues Python-Paket schnüren, in das man die vorhandenen Python-Pakete einpackt (hier: mypackage). Dann *muss* man den Suchpfad geeignet anpassen. Eine Ansatzpunkt dafür ist die PYTHONPATH-Umgebungsvariable (diese kann bei der Debian- Paketinstallation auch *systemweit* automatisch angepasst werden), ein anderer ist sys.path (welches den PYTHONPATH sowie Default-Pfade beinhaltet). Das sieht z. B. folgendermassen aus: -[mypackage/__init__.py]---------------------------------------------- import sys import os def _init(): my_path = os.path.dirname(__file__) if not my_path in sys.path: sys.path.insert(1, my_path) _init() del _init -[mypackage/database/ps2/Database/database.py]------------------------ from common.config.Profile import profiles def foo(): profiles.bar() -[mypackage/common/config/Profile/profiles.py]------------------------ def bar(): print 42 -[test.py]------------------------------------------------------------ import mypackage from mypackage.database.ps2.Database import database as mydatabase #from otherpackage.database import database mydatabase.foo() #database.bla() ---------------------------------------------------------------------- Wie man sieht, kann der Originalquelltext hier unverändert bleiben; nur die __init__.py des äusseren Python-Pakets muss man hinzufügen, und dann muss man das äussere Python-Paket explizit importieren (da dieses dann den Suchpfad um seinen Verzeichnispfad ergänzt). Das äussere Paket muss sich natürlich selbst im Suchpfad befinden. Diese Lösung ist natürlich nicht besonders schön; besser wäre sauberer Quelltext im Originalpaket. Aber es funktioniert – $ PYTHONPATH=../tmp python test.py 42 –, und der Änderungs- und Dokumentationsaufwand ist minimal. Vermutlich gibt es auch noch bessere Hacks, die Regeln für das Finden des Moduls bei der import-Anweisung sind ja recht komplex (RTFM). In jedem Fall wurde bereits von anderer Seite korrekt darauf hingewiesen, dass ein Python-Paket mit unsauberer Struktur allenfalls im privaten Debian- Repository aufgenommen werden wird. HTH -- PointedEars Please do not Cc: me. / Bitte keine Kopien per E-Mail. _______________________________________________ python-de maillist - python-de@python.org http://mail.python.org/mailman/listinfo/python-de