2016-04-17 10 views
1

Ich habe ein Modul mit vielen einfachen Hilfsfunktionen, aber es wird immer umfangreicher und mühsamer. Ich würde es gerne in ein einfaches Paket aufteilen. Mein Paketverzeichnis wird auf PYTHONPATH definiert ist, und sieht wie folgt aus:Fehler beim Konvertieren des Moduls in ein Paket

test 
|--__init__.py   <---this is empty 
|--a.py 
|--b.py 

Dies wird in der üblichen Weise (Import-Test) importiert, aber bei der Untersuchung (dir (Test)) die Bibliothek enthält nicht die Module a oder b , nur einige Top-Level-Attribute. Ich könnte einen Hinweis verwenden, was schief läuft. Vielen Dank!

Lösung von unten: Die Init-Datei lädt nun automatisch Module, auf die ich jedes Mal zugreifen möchte. Dies berücksichtigt die Python 3.4 innewohnenden absoluten Pfadannahmen.

from .a import a 
from .b import b 

Follow-Up: war meine Absicht, jedes Hilfsskript als eigenes Modul zu haben, führenden Module vielleicht viele kleine, die leicht zu finden und zu pflegen sind. Ist das idiomatisch? ineffizient? Ich bekomme die Wartung Auswirkungen auf die Init-Datei. Irgendwelche Erfahrungen oder Best Practices zum Teilen? Vielen Dank.

+0

Import die Namen möchten Sie aus a und b:

import test.a import test.b as b # variant if you don't want the package name 

Dann können Sie in den Modulen Funktionen aufrufen in der Init-Datei. – jonrsharpe

Antwort

5

Sie sollten auch import a und b aus dem Paket in Reihenfolge für dir, um sie aufzulisten. Wenn Sie in einem Paket zur automatischen Importmodule werden soll, wenn ein Paket zu importieren, geben Sie in __init__.py durch Import-Anweisungen der Module hinzufügen, die Sie in __init__.py

test   # package directory 
├── module1.py 
├── module2.py 
├── __init__.py 

importieren möchten module1 importieren, wenn Sie das Paket zu importieren, Sie __init__.py Muss enthalten Folgendes.

import module1 

Sie können ein Modul importieren aus dem test Paket mit from test import module2

bearbeiten:

Solange verschiedene Module unterschiedlichen Zwecken dienen, ist es besser, alle zugehörigen Helfer zu halten in ihren eigenen Modul. Alle Module, die standardmäßig importiert werden sollen, wenn Ihr Paket importiert wird, sollten in der Datei __init__.py angegeben werden. Andere können bei Bedarf importiert werden. Es sollte keine Auswirkungen auf die Leistung haben, selbst wenn Sie ein Modul mehrere Male importieren, werden sie nur einmal initialisiert, wie gefunden here.

+1

@JoeGavin ... Wenn Sie andere Bedenken haben, bitte posten Sie es als ein neues Q, wenn Sie sehen, es ist irrelevantes Thema zu Ihrem aktuellen Q oder aktualisieren Sie die aktuelle Q. –

+0

@ user161151 .. Können Sie Ihre Antwort mit der Arbeit aktualisieren Beispiele. –

1

Ich denke, die einfachste Antwort ist es, die Module, die Sie wie folgt importieren möchten:

test.a.foo() 
b.bar() 
Verwandte Themen