2017-02-25 2 views
0

Wenn zu import von einem Alias ​​versucht - was in scala üblich Ich war überrascht, folgende Ergebnisse zu sehen:Import-Module eines Pseudonyms gestattet

eine Alias ​​erstellen

import numpy as np 

Verwendung des Alias-Module zu importieren Es enthält

Gibt es eine andere Syntax/Äquivalent in Python nützlich für den Import von Modulen?

+1

von numpy Import linealg – Laszlowaty

+0

Ihr Beispiel funktioniert gut. Meintest du damit, dass du tatsächlich 'np import linalg' probiert hast? – BrenBarn

Antwort

9

Verwenden Sie import module as name tut nicht erstellen Sie einen Alias. Sie haben das Import-System falsch verstanden.

Import macht zwei Dinge:

  1. Legen Sie das Modul in den Speicher und das Ergebnis in sys.modules. Dies geschieht einmal nur; nachfolgende Importe verwenden das bereits geladene Modulobjekt erneut.
  2. Binden Sie einen oder mehrere Namen in Ihrem aktuellen Namespace.

Mit der Syntax as name können Sie den Namen im letzten Schritt steuern.

Für die Syntax from module import name müssen Sie immer noch das vollständige Modul benennen, da module in sys.modules nachgeschlagen wird. Wenn Sie wirklich einen Aliasnamen für diese haben wollen, können Sie zusätzliche Referenzen dort hinzu:

import numpy # loads sys.modules['numpy'] 
import sys 

sys.modules['np'] = numpy # creates another reference 

Beachten Sie, dass diese speziellen Fall in , Importieren numpy auch das Laden von numpy.linalg auslöst, so alles, was Sie tun müssen, ist :

import numpy as np 
# np.linalg now is available 

Kein Modul-Aliasing ist erforderlich. Für Pakete, die Submodule nicht automatisch importieren, dann würden Sie verwenden müssen:

import package as alias 
import package.submodule 

und alias.submodule dann ohnehin zur Verfügung steht, weil ein Submodul immer als ein Attribut auf dem übergeordneten Paket hinzugefügt wird.

+0

thx Martijn ich bekomme 'NameError: Name 'numpy' ist nicht definiert': Können Sie das Snippet überprüfen? Ah ok Ich hatte schon getan 'Import numpy als np' so brauchte ich' sys.modules [ 'np'] = np' – javadba

+0

@javadba: Haben Sie eigentlich laufen 'Import numpy' wie dargestellt? –

+0

das funktioniert gut - erhielt wenige Minuten zu vergeben warten – javadba

1

Mein Verständnis von Ihrem Beispiel wäre, dass da Sie bereits numpy importiert, können Sie nicht importieren sie mit einem Alias ​​erneut konnte, da es bereits die linalg Teil importiert haben würde.

Verwandte Themen