【发布时间】:2021-04-23 21:34:15
【问题描述】:
Python 3.8 macOS
我正在尝试在包中导入不同的模块,但在尝试使用相对导入时出现 ModuleNotFoundError 或 ImportError。
我有一个名为“practice_dir”的文件夹,其结构如下:
(base) or ƒ(~/practice_dir) >> tree
.
├── __init__.py
├── dir_1
│ ├── __init__.py
│ ├── file_1.py
│ └── subdir
│ ├── __init__.py
│ └── subfile.py
├── dir_2
│ ├── __init__.py
│ └── file_2.py
└── parent_file.py
网上有人提到,一旦我在每个包含模块的文件夹上都有一个 init 文件,那么绝对导入将从父包开始
相对导入将使用 .或..符号
这是我尝试过的一些示例
在 file_1 中:
from dir_2 import file_2
ModuleNotFoundError
from .dir_2 import file_2
ImportError: 尝试在没有已知父包的情况下进行相对导入
如果我在 dir_2 和 dir_1/subfolder 中做同样的事情也是一样的
init.py 文件现在是空的,我尝试将导入包含到文件中,但没有奏效。
我一直在查看在线和 youtube 上发布的一些问题,似乎有多种方法,一个人甚至提到如果你有 python 3.3+,你不需要 init 文件
一直在努力解决这个问题,非常感谢任何帮助!
【问题讨论】:
-
你的 main.py 脚本在哪里?如果你把它放在包含顶级包目录的同一个父目录中,导入应该都可以正常工作。
标签: python file import directory package