2016-07-19 8 views
2

Ich schrieb diesen Code:Differenzieren lokale Importe aus System importiert

import os 
import helpers 

Und sofort wurde mir klar, dass später, wenn ich das lese, werde ich fragen, ob helpers ein Systemmodul oder eine, die ich geschrieben habe, und in das Projektverzeichnis einfügen (ich kann mich nicht mehr daran erinnern! :)).

Jeder pythonische Weg, um es in diesem Code klar zu machen, dass os ein Systemmodul ist und helpers Teil meines Projekts ist? Ich könnte Kommentare zu diesem Effekt schreiben, aber das wäre nicht toll.

Wie andere Sprachen handhaben dies:

  • In C++ ist das Problem nicht existiert, weil das System von <> sind umgeben ist, während Projekt relativ von "" sind umgeben ist.

  • Die C# -Lösung für das Problem besteht darin, dass auf Funktionen, die in einer beliebigen Datei im aktuellen Projekt definiert sind, ohne eine Importanweisung zugegriffen werden kann.

Edit: fand ich a related PEP, die für den Import von Projekt-lokale Module eine from . import someModule Syntax führt. Ich werde das ausprobieren. Aber es ist nicht genug. Zum Importieren von Systemmodulen habe ich immer noch nur die generische Syntax import blah.

+0

Ich weiß nicht, ob es einen sprachspezifischen Mechanismus für was Sie wollen. Aber Sie können sicherlich einen Kontextmanager schreiben, der 'sys.path' manipuliert und nur von installierten Paketen oder projektspezifischen Paketen importiert. Obwohl dies der Lesbarkeit helfen könnte, wäre die Wartbarkeit eine PITA. – SuperSaiyan

Antwort

1

In mehreren Unternehmen, an denen ich gearbeitet habe, und mehreren Open-Source-Projekten, die ich gesehen habe, geschieht dies einfach durch Kodierung von Import-Anweisungen in Gruppen, mit Zeilenumbrüchen.

Die Gruppen sind immer in dieser Reihenfolge: Kernbibliotheksimporte, gefolgt von Drittanbieterimporten, gefolgt von Erstanbieterimporten.

So ein Beispiel für die Gruppierung würde wie folgt sein:

import os 
import sys 
from argparse import ArgumentParser 

import requests 
import termcolor 

from my_app import my_module1 
from my_app import my_module2 

Wie viele Dinge in Python, dieser Stil ist nur eine Codierung Konvention. Aber es ist eine gewöhnliche, daher denke ich, dass die Gruppierungen für die meisten Python-Entwickler leicht verständlich sein sollten. Tatsächlich wird es sogar in der PEP8 empfohlen.

Es gibt ein beliebtes Tool namens isort, das den Prozess der Gruppierung dieser Importe für Sie automatisieren kann.

Wenn Sie etwas expliziteres möchten, gibt es nichts, was Sie daran hindert, relative Importe für denselben Projektcode zu verwenden. Dann wird es 100% klar, dass diese Module aus dem gleichen Paket kommen.

Verwandte Themen