[Python] class import path

Alessandro Dentella sandro a e-den.it
Mar 12 Giu 2018 22:18:22 CEST


On Tue, Jun 12, 2018 at 10:44:50PM +0300, Matteo Perini wrote:
> ciao a tutti,
>
> ho un progetto che contiene una serie di sub-directory (diciamo src e lib).
>
> ora in un file project/src/file1.py  avrei bisogno di una classe (myclass)
> che è presente in project/lib/class.py
>
> come posso importarla?
>
>
> se il file è nella stessa directory scrivo:
>
> from class import myclass
>
> se è in una sub-directory scrivo:
>
> from sub-directory.class import myclass
>
>
> Ma nel caso sopra?


tutto dipende da come hai impostato il sys.path.  [i nomi mi pare che
siano troppo generici per essere utili ed espressivi, ipotizzo che
siano nomi utilizzati solo nell'esempio, rinominiamo class.py in
my_class.py comunque per evitare "from class import..."]

Con una struttura come questa, che non reputo molto standard, farei in
modo che il sys.path comprenda sia project/src che project/lib, quindi
da file1 potresti fare direttamente: from my_class import MyClass

Dico che non la reputo std perché i sorgenti vengono messo o in lib o
in src (solo per convenzione, non per necessità): perché separarne una
parte di qui ed una li là? le librerie non sono esse stesse dei
sorgenti? perché non fare src/file1.py src/lib/... bada che questa
differente struttura non è "migliore" e non risolve nessun problema di
per sè, solo a me sembra più logica.

Un file con nome 'class.py' va assolutamente evitato, a meno che non
cerchi guai, manda in confusione il sistema delle importazioni
(provalo!). È più ragionevole che il nome del file suggerisca già la
funzione (nel senso lato). Anche le cartelle hanno spesso il nome che
già indica cosa contengono (es.: django.contrib.auth)



sandro
*:-)


Maggiori informazioni sulla lista Python