Eigene Module mit Namen der Systemmodule möglich?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Eigene Module mit Namen der Systemmodule möglich?

Beitragvon sma » Sonntag 13. Januar 2008, 09:39

Ist es möglich, in einem eigenen Modul namens "curses" das Original nachzuladen? Oder verbaue ich mir durch unbedacht gewählte eigene Modulnamen grundsätzlich den Zugriff auf die Systemmodule? In diesem Fall würde ich sagen: Willkommen DLL-Hölle... ;)

Stefan
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Sonntag 13. Januar 2008, 09:58

Wsa hat das mit DLLs zu tun?

a) curses = __import__('curses')
b) from __future__ import absolute_imports
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Eigene Module mit Namen der Systemmodule möglich?

Beitragvon gerold » Sonntag 13. Januar 2008, 10:01

sma hat geschrieben:In diesem Fall würde ich sagen: Willkommen DLL-Hölle... ;)

Hallo Stefan!

Ich als langjähriger Visual Basic 6 Programmierer kenne die **DLL-Hölle** und noch viel mehr Schweinereien die mit COM zusammen hängen. Je größer dein Programm wird, desto schwieriger wird es damit klar zu kommen...

Aber einfach nur die Module nicht wie Systemmodule zu nennen, ist nicht damit vergleichbar. :wink:

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Sonntag 13. Januar 2008, 10:36

mitsuhiko, DLL-Hölle ist für mich das Problem, mit verschiedenen Versionen von Bibliotheken (oder im Python-Fall mit Modulen) umzugehen und an möglichen Versionskonflikten zu sterben.

gerold , was weiß ich denn, welche Namen Systemmodule in zukünftigen Python-Versionen haben werden. Wie kann ich da Konflikte ausschließen? Oder welche 3rd Party-Module ich noch später installieren werde und was die da den site-packages hinzufügen werden?

Ein einfaches "__import__('curses')" lädt ebenfalls das eigene Modul. Damit komme ich nicht an das Systemmodul heran - egal ob mit oder ohne absoluten Imports. Erst wenn ich mein Modul als Submodul in ein weiteres Modul schiebe und dort absolute imports benutze, geht es - erfordert aber Python 2.5 und ist IMHO irgendwie unschön.

Stefan
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 13. Januar 2008, 11:07

sma hat geschrieben:gerold , was weiß ich denn, welche Namen Systemmodule in zukünftigen Python-Versionen haben werden. Wie kann ich da Konflikte ausschließen?

Hallo Stefan!

Kein Problem! Denn wenn du das zukünftige Systemmodul in deinem aktuellen Programm nicht brauchst, ist es auch egal, wenn es namentlich überschrieben wird.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Sonntag 13. Januar 2008, 11:51

gerold hat geschrieben:Kein Problem! Denn wenn du das zukünftige Systemmodul in deinem aktuellen Programm nicht brauchst, ist es auch egal, wenn es namentlich überschrieben wird.

Stimmt auch wieder...

Stefan
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Sonntag 13. Januar 2008, 13:27

sma hat geschrieben:Ein einfaches "__import__('curses')" lädt ebenfalls das eigene Modul. Damit komme ich nicht an das Systemmodul heran - egal ob mit oder ohne absoluten Imports.

Deswegen erstellt man Packages.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 13. Januar 2008, 16:19

gerold hat geschrieben:Kein Problem! Denn wenn du das zukünftige Systemmodul in deinem aktuellen Programm nicht brauchst, ist es auch egal, wenn es namentlich überschrieben wird.

Nicht ganz. RuleDispatch nutzt beispielsweise das Parser-Modul der Stdlib, das ist ganz unpraktisch wenn man sein eigenes Modul ``parser.py`` nennt und sich wundert, warum RuleDispatch bei etwas komplizierterem Dispatching plötzlich crasht, je nachdem in welchem Ordner man den Beispielcode testet.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]