2016-05-04 39 views
-1

下面的代碼工作:Python的命名空間 '從X進口' '進口X' 和

from sqlalchemy.ext.declarative import declarative_base 
Base = declarative_base() 

但是,下面的:

import sqlalchemy 
Base = sqlalchemy.ext.declarative.declarative_base() 

拋出:module 'sqlalchemy' has no attribute 'ext'。怎麼可能?

回答

2

sqlalchemy是一個包,導入包不會自動加載其子模塊。當你做

import sqlalchemy 
Base = sqlalchemy.ext.declarative.declarative_base() 

導入系統不加載sqlalchemy.ext子模塊,因爲你沒有提出要求。

當你

from sqlalchemy.ext.declarative import declarative_base 
Base = declarative_base() 

你已經明確要求sqlalchemy.extsqlalchemy.ext.declarative得到加載,所以接入工程。

某些軟件包會自動將其子模塊加載到__init__.py的內部,因此您不必顯式導入子模塊。雖然這不是你應該依賴的東西。