[Python-de] Globaler "prefix" o.ae.

Hartmut Goebel h.goebel at goebel-consult.de
So Sep 11 13:59:17 CEST 2011


Am 11.09.2011 13:10, schrieb Ole Streicher:
> Stefan Schwarzer<sschwarzer at sschwarzer.net>  writes:
> Wenn dist-packages im PYTHONPATH enthalten ist (bzw. dieser
>> Suchpfad einkompiliert ist), werden Pakete und Module _in_
>> diesem Verzeichnis gefunden.
>>
>> import mypackage
>>
>> sollte dann also problemlos funktionieren.
> Tut es eben nicht. Weil mypackage/database/DbObject.py z.B. die Zeile
> enthält
>
> from common.BaseObject import BaseObject
>
> Dies liegt daran, dass die Upstream-Quellen direkt die Pakete "common"
> und "database" kennen und das Paket "mypackage" von mir nur eingeführt
> wurde, damit es nicht zu Clashes der allgemeinen Namen "common",
> "database" mit eventuell vorhandenen entsprechenden Pythonpaketen gibt.

"import mypackage" schlägt fehl, weil Deine Module bislang nur eine 
Sammlung von Modulen sind, aber eben kein Package.

Nach Deiner Begründung schlägt auch nicht "import mypackage" fehl, 
sondern ein Import innerhalb des Packages (das ja gar keines ist).

> Da die Quellen mehere Megabyte groß und unter aktiver Entwicklung sind,
> ist es aussichtslos, die import-Statements von Hand anzupassen, zumal
> sie auch gerne versteckt sind.

grep import?

Du wirst nicht darum herumkommen. Pech, aber so ist es. Fehler, die man 
in der Design-Phase macht, haben halt dummerweise große Auswirkungen.

Du kannst auch lib2to3 verwenden, um die import-statements zu korrigieren.

> daraus will ich etwas (ohne Änderung der Quelltexte) machen, bei dem ich
> sagen kann

Ohne Änderung des Quelltextes geht (wenn überhaupt) nur mit Hacks. Das 
solltest Du vermeiden, Hacks fallen einem irgendwann wieder auf die Füße.

-- 
Schönen Gruß - Regards
Hartmut Goebel
Dipl.-Informatiker (univ.), CISSP, CSSLP

Goebel Consult
Spezialist für IT-Sicherheit in komplexen Umgebungen
http://www.goebel-consult.de

Monatliche Kolumne: http://www.cissp-gefluester.de/
Goebel Consult ist Mitglied bei http://www.7-it.de



Mehr Informationen über die Mailingliste python-de