Importeren van bestanden uit een andere map

Ik heb de volgende mappenstructuur.

application/app/folder/file.py

en ik wil enkele functies importeren uit file.py in een ander Python bestand dat zich bevindt in

application/app2/some_folder/some_file.py

Ik heb geprobeerd

from application.app.folder.file import func_name

en enkele andere verschillende pogingen maar tot nu toe is het me niet gelukt om goed te importeren. Hoe kan ik dit doen?

Standaard kun je dat niet. Bij het importeren van een bestand doorzoekt Python alleen de huidige directory, de directory van waaruit het entry-point script wordt uitgevoerd, en sys.path waarin locaties zoals de installatie directory van het pakket zijn opgenomen (het'is eigenlijk iets complexer dan dit, maar dit dekt de meeste gevallen).

U kunt echter toevoegen aan het Python-pad tijdens runtime:

# some_file.py
import sys
# insert at 1, 0 is the script path (or '' in REPL)
sys.path.insert(1, '/path/to/application/app/folder')

import file
Commentaren (18)

Niets mis mee:

from application.app.folder.file import func_name

Zorg er alleen voor dat folder ook een __init__.py bevat, dit zorgt ervoor dat het als een pakket kan worden opgenomen. Ik weet niet zeker waarom de andere antwoorden het over PYTHONPATH hebben.

Commentaren (18)

Ik denk dat een ad-hoc manier zou zijn om de omgevingsvariabele PYTHONPATH te gebruiken zoals beschreven in de documentatie: Python2, Python3

# Linux & OSX
export PYTHONPATH=$HOME/dirWithScripts/:$PYTHONPATH

# Windows
set PYTHONPATH=C:\path\to\dirWithScripts\;%PYTHONPATH%
Commentaren (2)