Python __init__.py 未将主目录转换为包

问题描述 投票:0回答:1

很抱歉,我确信这个问题经常被问到,但我一生都无法克服这个问题,而且我找到的链接似乎不起作用。

我的文件结构如下

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 目录中.

python import package
1个回答
0
投票

从外部

soar
,使用
python -m soar.90min.main

您需要使用

soar
作为主包,并将主文件作为其中的文件。

相对导入将正常工作。

请记住,在大多数样式指南中,不鼓励相对导入。

© www.soinside.com 2019 - 2024. All rights reserved.