in Python 2 posso creare un modulo come questo:Come posso importare da un file nella directory corrente in Python 3?
parent
->module
->__init__.py (init calls 'from file import ClassName')
file.py
->class ClassName(obj)
E questo funziona. In python 3 posso fare la stessa cosa dall'interprete dei comandi e funziona (edit: Questo ha funzionato perché ero nella stessa directory con l'interprete). Tuttavia, se creo __ init __.py e fare la stessa cosa come questa:
"""__init__.py"""
from file import ClassName
"""file.py"""
class ClassName(object): ...etc etc
ottengo ImportError: non può importare nome 'ClassName', che non vede 'file' a tutti. Lo farà non appena importerò il modulo anche se posso importare tutto facendo riferimento direttamente (cosa che non voglio fare in quanto è completamente incoerente con il resto della nostra base di codice). Cosa dà?
che funziona, pensato che fosse qualche tipo di problema del percorso di ricerca. Chalking fino alla 'lista di cose che abbiamo cambiato in python 3 solo perché'. Grazie mille. –
Questo è un buon cambiamento. Significa che puoi avere sottomoduli che hanno lo stesso nome di un modulo base nella libreria core di Python es. 'mymodule.io' e tutte le importazioni per' io' sono completamente specificate e python non importa arbitrariamente il modulo sbagliato perché l'ordine dell'elenco dei percorsi da importare è cambiato. – Dunes
Sì, immagino che sia vero, per me nominare un modulo con lo stesso nome di un modulo di base è quello di evitare a tutti i costi a meno che non si stia reimplementando ma posso vedere come evitare 'oops abbiamo importato il modulo sbagliato' sarebbe molto utile. –