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.