Python命名空间'import X'和'from X import'

时间:2016-05-04 00:16:03

标签: python python-3.x sqlalchemy namespaces

以下代码有效:

class

但是,以下内容:

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

抛出:import sqlalchemy Base = sqlalchemy.ext.declarative.declarative_base() 。怎么会这样?

1 个答案:

答案 0 :(得分: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,因此访问权限有效。

你也可以做到

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

也会加载sqlalchemy.extsqlalchemy.ext.declarative

某些软件包会自动将其子模块加载到__init__.py内,因此您无需显式导入子模块。不过,这不是你应该依赖的东西。