在显式导入之前,导入包中的模块不可见

时间:2017-05-10 01:45:04

标签: python packages python-import

我有一个问题,我遇到过各种各样的包裹。我作为一个整体导入包并尝试访问模块,但显然不存在。但是,一旦我明确地单独导入它,它就可以在我原来导入的命名空间中恢复。这里发生了什么?

以下示例:

public ActionResult XXXX(List<GroupVM> model)

1 个答案:

答案 0 :(得分:1)

来自my wikipage,我过去曾写过这篇文章:

导入副作用

导入包并不意味着导入了子包/子模块(尽管有时可能看起来像这样!)

请考虑以下事项:

$ tree
.
└── pkg
    ├── __init__.py
    ├── mod2.py
    └── mod.py

1 directory, 3 files


$ tail -n 999 pkg/*
==> pkg/__init__.py <==

==> pkg/mod2.py <==
import pkg.mod
x = 2

==> pkg/mod.py <==
hi = 1


>>> import pkg
# Doesn't work!
>>> pkg.mod
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'mod'
# But if we import some module that has a side-effect of importing that module
>>> import pkg.mod2
# Suddenly it works!
# DON'T EVER DEPEND ON THIS BEHAVIOUR!
>>> pkg.mod
<module 'pkg.mod' from 'pkg/mod.py'>

简而言之,有时可能会导致导入包导入其子包,但仅当该包的__init__.py导入它时。通常,不要依赖于此行为,并明确指出导入子包。

相关问题