Ole Streicher wrote:
Thomas 'PointedEars' Lahn <PointedEars@web.de> writes:
-[mypackage/__init__.py]---------------------------------------------- [...] my_path = os.path.dirname(__file__) if not my_path in sys.path: sys.path.insert(1, my_path)
Das funktioniert nicht,
Das funktioniert hier sehr gut.
wie schon an anderer Stelle im Thread diskutiert.
Wo genau?
Bau doch mal Dein Paket und ein identisches unter "otherpackage" (d.h., otherpackage.__init__.py ist identisch zu mypackage.__init__.py).
Dann: mypackage/common/Base.py, otherpackage/common/Base.py (identisch) --------------------8<------------- class Base(object): def __str__(self): return __file__ --------------------8<-------------
mypackage/database/Databse.py, otherpackage/database/Databse.py (identisch) --------------------8<------------- from common.Base import Base class Database(Base): pass --------------------8<-------------
test.py: --------------------8<------------- from mypkg.database.Database import Database from otherpkg.database.Database import Database as Otherbase
ob = Otherbase() db = Database() print ob, db --------------------8<-------------
zeigt, dass otherpkg.database.Database die falsche Baseklasse nimmt.
Du hast mypkg hier gar nicht importiert, daher wird auch der code in mypkg/__init__.py nicht ausgeführt und sys.path nicht geändert.
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
nicht.
~/poo$ python test.py /home/ole/poo/mypkg/common/Base.py /home/ole/poo/mypkg/common/Base.py
Dein Beispiel hat mit meinem nicht allzuviel zu tun. Logisch, dass das *so* nicht funktioniert. -- PointedEars Please do not Cc: me. / Bitte keine Kopien per E-Mail.