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 *:-) _______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python