从 python3.10 中的同级目录导入模块

lap*_*ita 6 python module

已经有 10 多篇关于此问题的帖子了,没有一个答案对我有用,而且我仍然没有看到有人从同级目录导入某些内容的示例。

src
    __init__.py
    test.py
    package1
        __init__.py
        module1.py
    package2
        __init__.py
        module2.py
Run Code Online (Sandbox Code Playgroud)

(_ init _.py 在大于 3.3 的 python 版本上不是必需的,但我仍然保留它们,因为它们没有区别)

在 test.py 我有

import package1.module2
Run Code Online (Sandbox Code Playgroud)

它工作正常,但问题是当我想将某些内容从 package2 导入到 package1 时,反之亦然。我在 module2.py 中尝试了不同的导入方法,但收到了以下不同的错误消息:

import src.package1.module1.py
Run Code Online (Sandbox Code Playgroud)

出现错误:

ModuleNotFoundError: No module named 'src'
Run Code Online (Sandbox Code Playgroud)

from .. import package1
Run Code Online (Sandbox Code Playgroud)

出现错误:

ImportError: attempted relative import with no known parent package
Run Code Online (Sandbox Code Playgroud)

这里的最佳答案是:如何从同级目录导入 Python 脚本?还给我确切的错误消息,如我上面所示。答案在这里:如何从同级文件夹导入 Python 模块?没有任何改变。我是否遗漏了某些内容,或者是否无法在不同文件夹/包之间导入内容?我需要“sys.path hack”吗?

Had*_*i F 2

我尝试了几乎所有类似问题的解决方案,但没有一个对我有用!然而,在我把头撞到墙上后,我发现这个解决方案只需删除一个点就可以工作:

import sys
sys.path.append('..')
Run Code Online (Sandbox Code Playgroud)

只需在append方法中从字符串中删除一个点即可,即:

sys.path.append('.')
Run Code Online (Sandbox Code Playgroud)

或者你可以使用:

sys.path.insert(0, '.')
Run Code Online (Sandbox Code Playgroud)

然后您可以从同级文件夹导入任何模块。我使用 python 3.9.13 尝试过,效果很好。