it-swarm.com.de

Wie bekomme ich aktuelle Importpfade in Python?

Ich bekomme irgendwo im Code eine ImportError-Ausnahme, aber das gleiche Modul kann beim Start der Anwendung sicher importiert werden. Ich bin gespannt, welche Pfade Python nach zu importierenden Modulen sucht, damit ich nachvollziehen kann, warum dieses Problem auftritt. Ich habe das gefunden:

print sys.path

Ist dies die Liste aller Pfade, die das System beim Importieren eines Moduls sucht?

40
aligf

Die Pfadpositionen, die Python standardmäßig überprüft, können durch Überprüfen von sys.path überprüft werden.

import sys
print(sys.path)
50

Wenn Sie eine etwas bessere Formatierung wünschen:

import sys

from pprint import pprint

pprint(sys.path)
5
marsh

Die anderen Antworten sind fast richtig

Python 3:

import sys
import_paths = sys.path

In Python 2.7:

import sys
import os
import copy
import_paths = copy.copy(sys.path)
if '__file__' in vars(): import_paths.append(os.path.abspath(os.path.join(__file__,'..')))

In beiden Versionen ist die Hauptdatei (d. H. __== '__main' Ist True) und fügt sys.path automatisch ein eigenes Verzeichnis hinzu. Python 3 importiert jedoch nur Module aus sys.path. Python 2.7 importiert Module sowohl aus sys.path Als auch aus dem Verzeichnis der aktuellen Datei. Dies ist relevant, wenn Sie eine Dateistruktur haben wie:

|-- start.py
|-- first_import
|   |-- __init__.py
|   |-- second_import.py

mit inhalt
start.py:
import first_import
__ init__.py:
import second_import.py

In Python 3 funktioniert __init__.py direkt, aber wenn Sie start.py ausführen, kann __init__.py nicht import second_import.py, Da es sich nicht um sys.path Handelt.

In Python 2.7 kann __init__.py beim Ausführen von start.py import second_import.py, Obwohl es sich nicht in sys.path Befindet, da es sich im selben Ordner wie es befindet.

Ich kann mir keine Möglichkeit vorstellen, das Verhalten von Python 2.7 in Python 3 perfekt zu duplizieren.

0

Sys.path ist eine Liste aller Pfade, die Python beim Suchen von Importen durchsucht. Wenn Sie einem Verzeichnis, das eine oder mehrere Python-Dateien enthält, einen weiteren Pfad hinzufügen möchten, können Sie Folgendes verwenden: sys.path.append('path/to/directory').

0
Pauline Kelly