Tiedostojen tuominen eri kansiosta

Minulla on seuraava kansiorakenne.

application/sovellus/sovellus/kansio/tiedosto.py.

ja haluan tuoda joitakin funktioita tiedostosta file.py toiseen Python-tiedostoon, joka sijaitsee osoitteessa

application/app2/some_folder/some_file.py.

Olen kokeillut

from application.app.folder.file import func_name

ja joitakin muita erilaisia yrityksiä, mutta toistaiseksi en ole onnistunut tuomaan kunnolla. Miten voin tehdä tämän?

Oletusarvoisesti et voi. Tiedostoa tuodessaan Python etsii vain nykyisestä hakemistosta, hakemistosta, josta aloitusskripti suoritetaan, ja sys.path, joka sisältää sijainnit, kuten paketin asennushakemiston (se on itse asiassa hieman monimutkaisempi kuin tämä, mutta tämä kattaa useimmat tapaukset).

Python-polkua voi kuitenkin lisätä ajon aikana:

# 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
Kommentit (18)

Ei mitään vikaa:

from application.app.folder.file import func_name

Varmista vain, että kansio sisältää myös __init__.py, jolloin se voidaan sisällyttää pakettina. En ole varma, miksi muissa vastauksissa puhutaan PYTHONPATHista.

Kommentit (18)

Luulen, että ad-hoc tapa olisi käyttää ympäristömuuttujaa PYTHONPATH, kuten dokumentaatiossa on kuvattu: Python2, Python3.

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

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