2016-05-04 118 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的内部,因此您不必显式导入子模块。虽然这不是你应该依赖的东西。