Python dir()未显示包中的所有模块

2 投票
1 回答
2690 浏览
提问于 2025-04-17 00:21

我在使用 Python 2.6 的时候,发现 dir() 这个函数有点奇怪的表现。我想从一个目录或包中导入所有模块来进行单元测试,但当我对这个文件夹使用 dir() 时,并没有看到这个目录下的 所有 模块。

示例目录结构:

|-mod_dir\
|---__init__.py
|---modA.py
|---modB.py
|---modC.py
|
|-mod_tests\
|---__init__.py
|---test.py

示例 test.py 文件:

import mod_dir

for obj in dir(mod_dir):
   print obj

不幸的是,这时候我只得到了一些像这样的内容:

modA
__all__
__builtins__
__doc__
__file__
__name__
__package__
__path__

有没有人知道为什么其他模块没有出现在这里?我觉得这可能不重要,但 mod_dir 里的 __init__.py 文件是空的。我尝试过设置 __all__ 这个变量,但没有任何效果。不过,如果这真的重要的话,我是在 WinXp 上用 Eclipse 的 pydev 来做的。

背景:

mod_dir 下的每个模块都有一个单元测试,我想把它们包含在 test.py 的单元测试套件中。我知道有 nose 这样的工具和其他方法,比如 这个,但我更想知道为什么 dir 没有显示所有内容。

1 个回答

4

我觉得 __init__.py 文件是空的这一点很重要。

你可以在 __init__.py 里试试这个:

import modA
import modB
import modC

根据 Python 的文档,dir 这个函数不应该用来做这个(可以看看 dir 部分底部的说明)。它的严格性不够,主要是在交互式提示中使用。

撰写回答