3 Stimmen

Python - Wie wird PYTHONPATH mit einer komplexen Verzeichnisstruktur?

Betrachten Sie die folgende Datei \directory Struktur:

project\
|  django_project\
|  |  __init__.py
|  |  django_app1\
|  |  |  __init__.py
|  |  |  utils\
|  |  |  |  __init__.py
|  |  |  |  bar1.py
|  |  |  |  ...
|  |  |  ...
|  |  django_app2\
|  |  |  __init__.py
|  |  |  bar2.py
|  |  |  ...
|  |  ...
|  scripts\
|  |  __init__.py
|  |  foo.py
|  |  ...

Wie sollte ich die sys.path.append sur foo.py so dass ich die bar1.py y bar2.py ?
Wie würde die importieren aussehen?

3voto

Sam Dolan Punkte 30838

Verwendung von relative Pfade wäre aus Gründen der Übertragbarkeit viel wünschenswerter.

An der Spitze Ihrer foo.py Skript das Folgende hinzufügen:

import os, sys
PROJECT_ROOT = os.path.join(os.path.realpath(os.path.dirname(__file__)), os.pardir)
sys.path.append(PROJECT_ROOT)

# Now you can import from the django_project package
from django_project.django_app1.utils import bar1
from django_project.django_app2 import bar2

1voto

eruciform Punkte 7508
import sys
sys.path.append('/absolute/whatever/project/django_project/django_app1')
sys.path.append('/absolute/whatever/project/django_project/django_app2')

Allerdings müssen Sie abwägen, ob Sie beide in Ihrem Pfad haben wollen - für den Fall, dass es in beiden konkurrierende Modulnamen gibt. Es könnte sinnvoll sein, nur bis zu django_project auf Ihrem Weg und rufen Sie django_app1/bar1.py wenn Sie sie brauchen und import django_app2.bar2.whatever wenn Sie es brauchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X