Ich verwende Python 2.5.
Dies ist mein Ordnerbaum:
ptdraft/
nib.py
simulations/
life/
life.py
(Ich habe auch __init__.py
in jedem Ordner, hier aus Gründen der Lesbarkeit weggelassen)
Wie importiere ich die nib
Modul aus dem Inneren des life
Modul? Ich hoffe, dass es möglich ist, ohne an sys.path herumzubasteln.
Hinweis: Das Hauptmodul, das ausgeführt wird, befindet sich in der ptdraft
Ordner.
1 Stimmen
Wie ist Ihr PYTHONPATH eingestellt?
2 Stimmen
Ross: Ich habe es mir angesehen. Was soll ich dagegen tun? Ich habe bereits eine
__init__.py
. S.Lott: Ich weiß nicht, wie ich das überprüfen kann...4 Stimmen
Echo $PYTHONPATH aus der Shell; import sys; print sys.path aus Python heraus. docs.python.org/tutorial/
0 Stimmen
@FlipMcF Google ist eine Suchmaschine mit Blasen, daher spielt es keine Rolle, dass dieses Ergebnis für Sie ziemlich weit oben steht. Viel wichtiger ist die Tatsache, dass die nicht geblubberte Suchmaschine, DuckDuckGo, dieses Ergebnis ebenfalls sehr hoch einstuft.
0 Stimmen
@FlipMcF Es ist nichts falsch daran, einen absoluten Import wie in der Antwort von Hasen zu machen. Das wird in Django hunderte Male gemacht. Es ist absolut akzeptabel. In manchen Fällen ist ein relativer Import schöner und kürzer, also können Sie diese Methoden ruhig austauschbar verwenden.
0 Stimmen
@RamRachum Meine Meinung hat sich inzwischen zu Absolute Imports geändert. Relative Importe sind nett, aber "Explicit ist besser als Implicit" und in geringerem Maße "Namespaces sind eine großartige Idee".
0 Stimmen
@FlipMcF aber ich habe gehört, dass relative Importe als schlechtes Verhalten angesehen werden?
1 Stimmen
Werfen Sie einen Blick auf diesen endgültigen Leitfaden chrisyeh96.github.io/2017/08/08/…
20 Stimmen
Ich empfehle dringend, alles zu überspringen
sys.path
oPYTHONPATH
Antworten und Auschecken np8s ausgezeichnete Antwort . Ja, es ist eine lange Lektüre. Ja, es sieht nach einer Menge Arbeit aus. Aber es ist die einzige Lösung, die das Problem tatsächlich korrekt und sauber löst.9 Stimmen
Was ist aus dem ausführbaren Pseudocode geworden? Warum ist es so mühsam, Module aus einem übergeordneten Ordner in Python zu importieren? Das ist absurd.
2 Stimmen
@eric: Es ist nur dann schwierig, wenn Sie inkonsequent sind: Sie verwenden ein Dateilayout, das zu einem Paket (eine komplizierte, wiederverwendbare Bibliothek, von der Ihr Skript nur ein Client ist), aber der Versuch, es als Wegwerfprogramm auszuführen Skript (auch ohne
python -m
).15 Stimmen
Warum ist das so ein Problem? Nachdem ich alle Diskussionen und Antworten durchgelesen habe, gibt es immer noch keine vernünftige, einfache Lösung.
1 Stimmen
Ich behaupte, dass tjk's Antwort ist die einfachste und pythonischste. Wenn Sie eine Python-Funktion erstellen, die andere Dateien importiert, schreiben Sie keine einmaligen Skripte, so dass Ihre "Skriptdateien" eigentlich nur Moduldateien sind, und obwohl Sie sie als Skriptdateien ausführen können, wird dies eher als eine zusätzliche Funktion in die Dokumentation als die "richtige" Art, sie zu betreiben.
0 Stimmen
@ApollyssupportsMonica Es gibt keinen Schmerz. Wenn du Code von außerhalb des Pakets direkt importieren möchtest, aktualisierst du einfach die
sys.path
. Daran ist nichts schwierig oder hakelig. Beachten Sie, dass der Standardweg darin besteht, keinen externen Code direkt zu importieren, sondern diesen Code als Abhängigkeit zu installieren, indem Sie diepip
Werkzeug.