Importieren von Dateien in Python von __init__.py
Frage
Angenommen, ich habe die folgende Struktur:
app/
__init__.py
foo/
a.py
b.py
c.py
__init__.py
a.py, b.py und c.py einige gemeinsame Importe (Logging, os, re, etc.) teilen. Ist es möglich, diese drei oder vier gemeinsame Module aus der __init__.py
-Datei zu importieren, damit ich sie nicht in jedem der Dateien importieren muß?
Edit:. Mein Ziel ist es 5-6 Module in jeder Datei zu importieren, um zu vermeiden, und es ist nicht zu Performance-Gründen im Zusammenhang
Lösung
Nein, müssen sie in jedem Modul Namensraum gesetzt werden, so muss man sie irgendwie importieren (es sei denn, Sie logging
um als Funktion Argument übergeben, die eine seltsame Art und Weise, Dinge zu tun wäre, gelinde gesagt).
Aber die Module werden nur einmal sowieso importiert (und dann in den a
, b
und c
Namespace), also keine Sorge über zu viel Speicher verwendet oder so ähnlich.
Sie natürlich können sie in einem separaten Modul setzen und Import , die in jede a
, b
und c
, aber dieses separates Modul würde noch sein müssen importiert jedes Mal.
Andere Tipps
Sie können dies tun, eine gemeinsame Datei wie include.py
verwenden, aber es geht gegen den empfohlenen Praktiken, weil sie eine Wildcard Import beinhaltet. Betrachten Sie die folgenden Dateien:
app/
__init__.py
foo/
a.py
b.py
c.py
include.py <- put the includes here.
__init__.py
Nun, in a.py
usw. tun:
from include import *
Wie bereits erwähnt, ist es nicht zu empfehlen, da Wildcard-Importe abgeraten.
Ja, aber tut es nicht . Im Ernst, dies nicht tun. Aber wenn Sie noch wissen wollen, wie es zu tun, es so aussehen würde:
import __init__
re = __init__.re
logging = __init__.logging
os = __init__.os
, ich sage nicht, dass es nicht nur zu tun, weil es ist chaotisch und sinnlos, sondern auch, weil Ihr Paket soll nicht wirklich __init__.py
so verwenden. Es ist Paket Initialisierungscode.