python - 导入另一个文件的文件
问题描述
我想导入一个也导入另一个文件的文件。
我目前有以下目录结构:
.
├── main.py
└── foo
├── file1.py
├── file2.py
└── file3.py
使用以下代码:
# main.py
from foo.file1 import func1
func1()
# foo/file1.py
from file2 import func2
from file3 import func3
def func1():
# Do stuff
func2()
func3()
if __name__ == "__main__":
# Do some other stuff
func1()
# foo/file2.py
from file3 import func3
def func2():
# Do stuff
func3()
# foo/file3.py
def func3():
# Do stuff
如果我跑main.py
,我会得到ModuleNotFoundError: No module named 'file2'
。
我可以用替换该行from file2 import func2
并对foo/file1.py
file3from foo.file2 import func2
导入执行相同的操作,但随后我无法自行运行foo/file1.py
。
解决此问题的推荐方法是什么?
解决方案
Python3
不支持Implicit Relative Imports
eg from file2 import func2
,我们需要使用Explicit Relative Imports
eg from .file2 import func2
。
foo/file1.py
变化中:
from file2 import func2
from file3 import func3
至:
from .file2 import func2
from .file3 import func3
在foo/file2.py
变化中:
from file3 import func3
至:
from .file3 import func3
您可能想阅读:Python 中的绝对与相对导入
推荐阅读
- r - Keeping group_by in tact while applying a filter within mutate in dplyr
- powershell - Check item into List box by Radio Button
- java - How can I create a Jenkins pipeline to run a Java Application on a schedule?
- docker - 如何在 ubuntu 上构建基于 alpine 的类似 docker 镜像?
- jquery - My jquery code for showdays was working with accurate date now but now it is 1 day less
- docker - Azure DevOps pipeline not setting docker memory
- html - 在一行中显示所有列,并且不会溢出到 HTML 中的下一行
- c# - Failed http request WebApi using Angular
- javascript - Problem with QuickSort algorithm causing Maximum Call Stack
- google-sheets - Combing base data set for a formula from two *other* Google sheets