很抱歉,我确信这个问题经常被问到,但我一生都无法克服这个问题,而且我找到的链接似乎不起作用。
我的文件结构如下
soar/
__init__.py
SignIn.py
SignInOTP.py
90min/
__init__.py
main.py
在我的 main.py 中,我尝试访问 SignIn 和 SignInOTP 中的方法。我尝试了多种方法来访问这些,但没有成功。
from ..SignIn import sign_in
from ..SignInOTP import sign_in_otp
据我所知,由于我在两个目录中都有
__init__.py
文件,因此它们都是包。然而,根据 pycharm 的说法,情况似乎并非如此,因为 soar 目录没有包图标。
我的初始化文件都是空白的,因为我认为我不需要它们的任何东西。我收到的错误是
ImportError: attempted relative import with no known parent package
当我尝试通过
python -m '.\90min\main.py'
运行文件时,我得到:
C:\Users\path\to\python.exe: Relative module names not supported
我知道这是一个常见的错误,但我一生都无法弄清楚。我知道这可能是一个小修复,但我不太明白 python 导入是如何完全工作的。我知道我可以通过将 SignIn 和 SignInOTP 文件移动到 90min 目录来解决这个问题,但我的 Java 大脑希望这 2 个文件位于主 soar 目录中,因为这 2 个文件将在其他目录中使用,而不仅仅是 90min 目录中.
从外部
soar
,使用python -m soar.90min.main
。
您需要使用
soar
作为主包,并将主文件作为其中的文件。
相对导入将正常工作。
请记住,在大多数样式指南中,不鼓励相对导入。