[Python-de] Globaler "prefix" o.ae.
Thomas 'PointedEars' Lahn
PointedEars at web.de
Di Sep 13 17:29:58 CEST 2011
Ole Streicher wrote:
> Thomas 'PointedEars' Lahn <PointedEars at 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.
Mehr Informationen über die Mailingliste python-de