我对动态模块导入以及dir/vars/__dict__
对导入模块的行为有疑问。
我有以下目录树:
|sv
|--__init__.py
|tests
|----__init__.py
|some_test
|----test.py
|----__init__.py
|tools
|----__init__.py
|SVE
|----__init__.py
|prun
|----__init__.py
|----prun.py
我正在使用此命令运行prun.py
:
python -m sv.tools.SVE.prun.prun
在prun.py
中,我有这段代码(我将其称为Critical_Code):
sys.path.insert(1 ,full_path_to_folder)
curr_test = importlib.import_module("test", "sv.tests." + "some_test")
print dir(curr_test)
full_path_to_folder
指向ROOT/sv/tests/some_test
这就是sv/tests/some_test/test.py
的样子:
import getpass
from sv.tools.SVE.svTest.svTest import Test
import sv.tools.SVE.utils.utils as utils
import sv.tools.SVE.utils.remote_operations as remote_operations
class NewClass(Test):
pass
经过这么长的序言,这是我的问题:
我正在运行prun,并且我使用import_module导入test.py
并使用dir()
打印了它的内容,结果就是这样:
['NewClass', 'Test', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'getpass', 'remote_operations', 'utils']
我希望看到的是什么。
但是当我从Critical_Code中删除第一行并且不将路径添加到sv / tests / some_test到PATH时,这就是dir()打印的内容:
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
其中不包含test.py中的所有导入及其中定义的类。
为什么?当我向PATH添加some_test的路径时,为什么dir()显示更多?
我尝试使用vars和__dict__
,但它们的行为都相同。