2014-06-12 12 views
6

Dlaczego pierwszy kod nie działa, a drugi nie?Dlaczego import nie zawsze powoduje import pakietów zagnieżdżonych?

Pierwszy kod:

import selenium 

driver = selenium.webdriver.Firefox() 

AttributeError: 'module' object has no attribute 'webdriver'

Drugi kod:

from selenium import webdriver 

driver = webdriver.Firefox() 
+1

Jestem również ciekawy tego. Zauważyłem, że iPython Notebook pomija rzeczy podczas importowania modułu, nawet jeśli "z modułu import" * ... – Engineero

+1

Dla tego, co jest warte, selen "' _init __. Py "jest po prostu" z selenu import selenu ". Nie importuje niczego innego. – Michael

+1

@Michael ... więc to znaczy, że ktoś mógłby chcieć napisać 'from selenium.selenium import selenium': D –

Odpowiedz

12

zagnieżdżone pakiety nie są automatycznie ładowane; dopiero po zaimportowaniu selenium.webdriver jest dostępny jako atrybut. Importowanie tylkoselenium to za mało.

Wykonaj:

import selenium.webdriver 

driver = selenium.webdriver.Firefox() 

Czasami sam pakiet będzie importować zagnieżdżony pakiet w inicjalizatorze __init__.py pakietu; os importuje os.path, więc os.path jest natychmiast dostępny, nawet jeśli importujesz tylko os.