绝对和相对导入不适用于自定义包
Absolute and relative imports not working for custom package
我有一个目录结构的包(或者我认为应该是一个包):
Switch/
tests/
testing.py
Sw.py
#otherfiles
我正在尝试从 testing.py 导入 Sw.py。我尝试了几种方法,包括 from .. import Sw
、import ..Sw
、from 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
。
我有一个目录结构的包(或者我认为应该是一个包):
Switch/
tests/
testing.py
Sw.py
#otherfiles
我正在尝试从 testing.py 导入 Sw.py。我尝试了几种方法,包括 from .. import Sw
、import ..Sw
、from 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
。