six to pakiet, który pomaga w pisaniu kodu, który jest kompatybilny zarówno z Python 2 i Python 3.
Jednym z problemów napotykają programiści pisząc kod python2 i 3 jest to, że nazwy kilku modułów z standardowa biblioteka uległa zmianie, mimo że funkcjonalność pozostaje taka sama.
Moduł six.moves
zapewnia moduły o wspólnej nazwie zarówno dla Python2, jak i 3 (głównie poprzez zapewnienie modułu Python2 pod nazwą modułu Python 3).
Więc linia
from six.moves import urllib
import urllib
kiedy uruchamiane z Python3 i importuje mieszankę z urllib
, urllib2
i urlparse
z python2, naśladując struktury Python3 na urllib
. Zobacz także here.
EDIT zająć aktualizację pytanie:
TLDR; W tym przypadku niekoniecznie istnieje bezpośredni związek między importowanym modułem urllib
a plikiem w systemie plików. Odpowiedni plik jest dokładnie taki, na jaki wskazuje six.__file__
.
Moduły stron trzecich są zdefiniowane w pliku/katalogu, który jest wymieniony w sys.path
. W większości przypadków można znaleźć nazwę pliku, do którego moduł jest importowany, sprawdzając atrybut danego modułu, np. __file__
. six.__file__
. Jednak z six.moves
rzeczy nie są tak proste, właśnie dlatego, że eksponowane moduły mogą nie odwzorowywać jeden do jednego na rzeczywiste moduły Pythona, ale zhakowane wersje tych.
Pytasz, do czego służy 'six.moves.urllib'? Czy przeczytałeś instrukcję? https://pythonhosted.org/six/#module-six.moves - A może chcesz się dowiedzieć, w jaki sposób jest on dokładnie zaimplementowany (w takim przypadku kod źródłowy jest dostępny ...)? – deceze