Um später weitere Plattformen hinzufügen zu können, dachte ich eher an ein Package, um die zusammengehörigen .py-Dateien besser zu strukturieren.
Also habe ich ein Verzeichnis namens qwer angelegt. Dort drin liegen:
- • __init__.py
• qwer.py
• win32.py
Code: Alles auswählen
import sys
PLATFORM = sys.platform
# define platform specific modules here and import them 'as osdep' (OS dependent)
if PLATFORM == "win32":
import win32 as osdep
else:
osdep = None
raise ImportError("This platform is not supported: %s" % PLATFORM)
# base module
from qwer import *
Das plattformspezifische Modul qwer/win32.py enthält alle Namen, die qwer/qwer.py benutzt. Als Rückgabewert bringt win32.py immer standardisierte (von mir vorgegebene) Formate, mit der das "base module" was anfangen kann.
Sinn der Sache ist es, dass man später für Unix und Co. weitere plattformspezifische Module hinzufügen kann. Sie müssen ebenfalls alle Namen enthalten und gleich formatierte Rückgabewerte liefern wie win32.py, nur wie sie an die Informationen rankommen kann intern völlig anders gestaltet sein.
Nun endlich zur Frage: from qwer import * importiert ja nur alles, was nicht mit einem Unterstrich ("_") beginnt. Ich benutze aber auch Funktionsnamen und Modulvariablen, die mit einem Unterstrich beginnen. Die werden dann nicht importiert. Keine gute Lösung. Ich nutze das, weil ich alles aus qwer/qwer.py verfügbar haben will, wenn ich mittels import qwer das Package importiere. Ich möchte quasi alles aus qwer/qwer.py in qwer/__init__.py verfügbar machen. Wie erreiche ich mein Ziel?
Frage 2: Das Importieren der plattformspezifischen Module ist komisch bzw. ich verstehe es nicht… import win32 as osdep funktioniert zwar fehlerfrei, steht dann aber nach so einem Aufruf hier nicht zur Verfügung:
Code: Alles auswählen
import qwer
a = qwer.AClass()
# NameError: global name 'osdep' is not defined
Code: Alles auswählen
class AClass:
def __init__(self):
print osdep.test
Code: Alles auswählen
test = "works"
Code: Alles auswählen
import qwer
print osdep
# NameError: name 'osdep' is not defined