绝对和相对导入不适用于自定义包

Absolute and relative imports not working for custom package

我有一个目录结构的包(或者我认为应该是一个包):

Switch/
    tests/
        testing.py
    Sw.py
    #otherfiles

我正在尝试从 testing.py 导入 Sw.py。我尝试了几种方法,包括 from .. import Swimport ..Swfrom Switch import Sw 和其他几种变体。我已经在 Switch 目录和 tests 目录中尝试了这些有和没有 __init__.py 文件。我遇到的主要错误是:

Traceback (most recent call last):
  File "tests/testing.py", line 10, in <module>
    from .. import Sw
ImportError: attempted relative import with no known parent package

虽然我在尝试 import ..Sw 时也会遇到语法错误,而在尝试 from Switch import Sw 时也会遇到语法错误 ModuleNotFoundError: No module named 'Switch'

虽然我在 WSL 运行ning Python 安装在 Windows,所以路径有些复杂。

当我转到 Switch 和 运行 python -c "import Switch.Sw" 上面的目录时,它工作正常,但在 Switch 目录中它响应 ModuleNotFoundError: No module named 'Switch'

使用此代码向上一个目录,然后您应该能够从您的包中导入

import os, sys
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)

我知道这很麻烦,但我不确定是否有更好的解决方案。

我发现问题是我 运行 文件作为脚本或我的命令作为脚本。 python -c "import Sw""import Sw" 视为脚本,这就是相对和绝对导入不起作用的原因。它没有将 Sw 视为包的一部分,只是一个独立的模块。 This Question 帮我解决了问题。我应该一直在做 python -m Switch.Sw