如何从 python3 中的子文件夹导入模块(__init__.py 为空)
How to import a module from a subfolder in python3 (with empty __init__.py)
我想从子文件夹中的文件调用函数。我宁愿静态地做。我使用空的 __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)
但我真的不想动态地执行它,尤其是对于多个文件。
这个 处理我的错误消息,但据我所知不处理子文件夹(它对我来说工作正常 submodule.py
与 callfoo.py
处于同一级别)
有几个问题涉及从子文件夹导入,但我无法让它们为我工作。
我希望提供了一个非常简单的问题公式。
假设我们有这个 folders/files 架构:
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
我想从子文件夹中的文件调用函数。我宁愿静态地做。我使用空的 __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)
但我真的不想动态地执行它,尤其是对于多个文件。
这个 submodule.py
与 callfoo.py
处于同一级别)
有几个问题涉及从子文件夹导入,但我无法让它们为我工作。 我希望提供了一个非常简单的问题公式。
假设我们有这个 folders/files 架构:
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