无法使用相对导入访问模块

not able to access the modules using relative imports

我的文件夹结构如下

mypackage/
    __init__.py
    package1/
        __init__.py
        module1.py        # has ClassOne 
        module2.py        # has ClassTwo
        script.py
    package2/
        __init__.py
        module3.py        # has ClassThree
        module4.py        # has ClassFour

script.py 中,我想从 module4 访问 ClassFour,所以我使用如下所示的相对导入

from ..module4 import ClassFour

c = ClassFour()

但我遇到了错误

ValueError: attempted relative import beyond top-level package

我知道我可以使用

解决这个问题
import sys

sys.path.append("path/to/my/module/")

但我对相关导入的解决方案很感兴趣。

我提到了几个问题并尝试了类似的解决方案 - How to do relative imports

并且还尝试运行我的文件使用

python -m script

但没有成功

你只需要在调用 module4 之前调用 package2,

from ..package2.module4 import ClassFour

因为使用单个 .. 你可以跳出 package1 但无法访问 package2 及其文件。

例如,您可以查看以下结构。

调用文件内容:

package1/module2.py contains a function, function1.
package2/__init__.py contains a class, class1.
package2/subpackage1/module5.py contains a function, function2.

您可以这样将 class1 和 function2 导入到 package2/module3.py 文件中:

from . import class1
from .subpackage1.module5 import function2

如需更多参考,您可以访问此 link:Reference

要运行你的包内的脚本你可以这样做:

python -m mypackage.package1.script

如果您没有安装包(例如通过 pip),那么您需要从 mypackage 的父目录调用该命令(否则任何目录都可以)。

为此,您还需要更正您正在使用的导入。目前 ..module4 不指向现有模块。相反,它应该是

from ..package2.module4 import ClassFour

或者,如果您在 package2/__init__.py 中导入了 ClassFour,那么您还可以:

from ..package2 import ClassFour