W python 2 mogę utworzyć moduł tak:Jak importować z pliku w bieżącym katalogu w Pythonie 3?
parent
->module
->__init__.py (init calls 'from file import ClassName')
file.py
->class ClassName(obj)
I to działa. W pythonie 3 mogę zrobić to samo z interpretera poleceń i działa (edytuj: działało, ponieważ byłem w tym samym katalogu z uruchomionym interpreterem). Jednak jeśli tworzę __ startowy __.py i zrobić to samo tak:
"""__init__.py"""
from file import ClassName
"""file.py"""
class ClassName(object): ...etc etc
uzyskać ImportError: Nie można zaimportować nazwy „ClassName” nie widzi „Plik” w ogóle. Zrobi to tak szybko, jak tylko zaimportuję moduł, mimo że mogę zaimportować wszystko, bezpośrednio odwołując się do niego (czego nie chcę robić, ponieważ jest całkowicie niezgodny z resztą naszego kodu). Co daje?
To działa, pomyślałem, że to jakiś rodzaj wydania ścieżce wyszukiwania. Pisząc to na "liście rzeczy, które zmieniliśmy w pythonie 3 tylko dlatego". Dzięki wielkie. –
To dobra zmiana. Oznacza to, że możesz mieć submoduły, które mają taką samą nazwę jak moduł podstawowy w bibliotece rdzeniowej Pythona, np. 'mymodule.io', a wszystkie importowane pliki' io' są w pełni określone, a python nie importuje arbitralnie niewłaściwego modułu, ponieważ zmieniło się uporządkowanie listy ścieżek do importu. – Dunes
Tak, myślę, że to prawda, dla mnie nazwanie modułu o tej samej nazwie co moduł podstawowy jest za wszelką cenę unikane, chyba że ponownie go wprowadzasz, ale widzę, że bardzo przydatne byłoby uniknięcie "oops zaimportowaliśmy niewłaściwy moduł". –