Ho un file chiamato tester.py
, situato su /project
.Importare un file da una sottodirectory?
/project
ha una sottodirectory chiamata lib
, con un file chiamato BoxTime.py
:
/project/tester.py
/project/lib/BoxTime.py
voglio importare BoxTime
da tester
. Ho provato questo:
import lib.BoxTime
che ha portato:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
Delle idee come importare BoxTime
dalla sottodirectory?
EDIT
La __init__.py
era il problema, ma non dimenticate di fare riferimento a BoxTime
come lib.BoxTime
, o l'uso:
import lib.BoxTime as BT
...
BT.bt_function()
Perché ci si sente * * hacky? È il modo in cui Python segna le directory di importazione sicure/disponibili. – IAbstract
Non solo contrassegna le directory di importazione sicure/disponibili, ma fornisce anche un modo per eseguire un codice di inizializzazione durante l'importazione di un nome di directory. – Sadjad
Sì, questo è hacky e anche sporco, e secondo me il linguaggio non dovrebbe imporre il suo modo di caricare i file attraverso il filesystem. In PHP abbiamo risolto il problema lasciando che il codice userland registrasse più funzioni di autoloading chiamate quando manca uno spazio dei nomi/classe. Quindi la comunità ha prodotto lo standard PSR-4 e il compositore lo implementa, e al giorno d'oggi nessuno si deve preoccupare di ciò. E niente stupidi file '__init__' con hardcoded (ma se lo vuoi, registra semplicemente un hook di caricamento automatico! Questa è la differenza tra _hacky_ e _hackable_). –