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

2024-09-27 00:23:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我正在尝试从testing.py导入Sw.py。我试过几种方法,包括from .. import Swimport ..Swfrom Switch import Sw和其他几种变体。我在Switch目录和tests目录中尝试了使用和不使用and __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 ..SwModuleNotFoundError: No module named 'Switch'时也会出现语法错误

我已经尽了最大努力确保包中的目录都不在path或pythonpath中,尽管我在WSL上运行安装在Windows上的Python,因此路径有些复杂

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


Tags: 方法nofrompyimport目录testssw
2条回答

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

使用此代码进入目录,然后您应该能够从包中导入

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)

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

相关问题 更多 >

    热门问题