【问题标题】:Python namespace 'import X' and 'from X import'Python 命名空间“导入 X”和“从 X 导入”
【发布时间】:2016-08-29 05:22:15
【问题描述】:

以下代码有效:

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

但是,以下内容:

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

抛出:module 'sqlalchemy' has no attribute 'ext'。怎么可能?

【问题讨论】:

    标签: python python-3.x sqlalchemy namespaces


    【解决方案1】:

    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 中加载它们的子模块,所以你不必显式地导入子模块。不过,这不是您应该依赖的东西。

    【讨论】:

      猜你喜欢
      • 2017-01-12
      • 2017-01-25
      • 2012-08-29
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 2021-10-03
      相关资源
      最近更新 更多