同一个import语句from mypackage._aux import is_error
在类似的文件中有两种不同的含义:
在
_aux/foobar/_foobar.py
其中is_error
从_aux/is_error/_is_error.py
.但是在
_aux/abbrev_testing/_abbrev_testing.py
其中导入了整个模块_aux/is_error
。
第一个是预期的行为,因为_aux/__init__.py
contains from .is_error._is_error import is_error
。(格式from .folder.file import function
)
当我运行pytest
时,两个测试_abbrev_testing_test.py
失败,因为is_error
不是预期的功能。( TypeError: 'module' object is not callable
)
当我使用我想用新函数缩写的行时,它可以工作:
这包括测试_foobar_test.py
- 所以在_foobar.py
函数中被导入。
有人了解这两个文件之间的区别吗?我应该以不同的方式做到这一点吗?
我很想知道是否有一些逻辑规则可以避免这种情况。(对我来说,这看起来很荒谬和不稳定。)
编辑:在这两个文件中它都有效,当我使用不依赖的长导入语句时_aux/__init__.py
:
短:(
from mypackage._aux import is_error
格式from _aux import function
)长:(
from mypackage._aux.is_error._is_error import is_error
格式from _aux.folder.file import function
)
这个问题可以概括为:
什么在_abbrev_testing.py
破坏__init__.py
?
编辑2:重现步骤:
me@ubuntu:~$ git clone https://github.com/watchduck/module_object_is_not_callable.git
me@ubuntu:~$ cd module_object_is_not_callable/
me@ubuntu:~/module_object_is_not_callable$ virtualenv -p python3 env
用 IDE 打开项目。
(env) me@ubuntu:~/module_object_is_not_callable$ pip install pytest
(env) me@ubuntu:~/module_object_is_not_callable$ pytest