我想从一个子文件夹中的文件调用一个函数。我希望能够静态地完成这个操作。我使用空的__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()
子模块.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'
。我有点困惑,因为它们直接来自文档
import .folder.submodule
-> invalid syntax
importlib.import_module('test.folder.submodule')
ModuleNotFoundError: No module named '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 处理了我的错误信息,但据我所知并没有处理子文件夹的情况(对于与 callfoo.py
处于同一级别的 submodule.py
文件,它可以正常工作)
有几个问题涉及从子文件夹导入,但我无法让它们为我工作。 希望我已经提供了一个非常简单的问题描述。
sys.path
。它说:“导入包时,Python会在sys.path上的目录中查找包子目录。” - Chiheb Nexus