我想从子文件夹中的文件调用函数。我宁愿做静态的。我使用空的__init__.py
文件,因为我已经读过,在简单的情况下,它们可能是空的(我的不可能更简单),或者从3.5开始,我不需要它们所有。但我愿意填补它们。
我有以下文件结构:
test
├── callfoo.py (main)
├── __init__.py (empty)
└── folder
├── submodule.py
└── __init__.py (empty)
callfoo.py:
#import statement wanted
def main():
foo()
if __name__ == "__main__":
main()
submodule.py
def foo():
print('foo')
对于我尝试的导入声明:
import test.folder.submodule
from test.folder import submodule
from test.folder.submodule import foo
每个导致ModuleNotFoundError: No module named 'test.folder'
我在这里有点困惑,因为它们直接来自Documentation
import .folder.submodule
- > invalid syntax
importlib.import_module('test.folder.submodule')
ModuleNotFoundError:没有名为' test.folder'
这有效:
import importlib.util
spec = importlib.util.spec_from_file_location("submodule", "/home/.../test/folder/submodule.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
但我真的不想动态地做这件事,特别是对于几个文件。
此ModuleNotFoundError: No module named x处理我的错误消息,但不是我所知道的子文件夹(对于submodule.py
与callfoo.py
处于同一级别的#[macro_use]
extern crate arrayref;
/// Get the first 3 elements of `bytes` as a reference to an array
/// **Panics** if `bytes` is too short.
fn first3(bytes: &[u8]) -> &[u8; 3] {
array_ref![bytes, 0, 3]
}
,它可以正常工作)
有几个问题涉及从子文件夹导入,但我不能让它们为我工作。 我希望提供一个简单的问题公式。
答案 0 :(得分:5)
假设我们有这个文件夹/文件架构:
test
├── callfoo.py
└── folder
├── __init__.py
└── submodule.py
1 directory, 3 files
<强> callfoo.py 强>:
from folder.submodule import foo
def main():
foo()
if __name__ == '__main__':
main()
<强> submodule.py 强>:
def foo():
print('foo in submodule')
现在将自己置于同一级别的callfoo.py
文件夹中并运行:
$ python3 callfoo.py
输出:
> foo in submodule