从包目录中导入包

Import package from within package directory

我目前正在使用以下目录结构:

package/
    __init__.py
    MainModule.py
    Module2.py
    run.py

使用 Python 3,我了解到为了让 MainModule 导入 Module2,我需要使用显式相对导入(即 import .Module2 ).但是,之前我通过 运行ning MainModule 作为脚本测试这些文件,在这种情况下我得到

SystemError: Parent module '' not loaded, cannot perform relative import

来自 this answer,据 Guido 说,我了解到 运行将模块作为脚本是有点老套和非 pythonic 的。因此,我添加了 run.py,即:

import sys
sys.path.append('/path/to/package-superdirectory')
from package.MainModule import main

main()

出于某种原因,当我 运行 run.py 时,我得到

ImportError: No module named 'package.MainModule'; 'package' is not a package

有没有办法可以 运行 MainModule 使用 package/ 中的脚本?出于组织目的,我需要 package/ 目录中的脚本,并且我需要 MainModule 才能使用显式相对导入。这些文件将放入库中,但它们目前不在 PYTHONPATH 上,因此据我所知 python3 -m 在这里不起作用。

更新:

我需要 运行 来自特定目录的这个特定脚本,/other/dir,所以答案需要能够 运行 run.py(或 MainModule) 来自任何地方。

你创造了吗 初始化.py 在 /package?

编辑: 尝试使用 from .MainModule import main

所以我想出了如何让它发挥作用。由于我的环境中有一个 package(它是同一个包的稳定版本),我不得不在 package 的超级目录之上添加路径。所以我的 run.py 现在看起来像:

#!/usr/bin/env python3
import sys
sys.path.append('/path/to')
from package-superdirectory.package.MainModule import main

main()

假设 package 中的所有模块都使用显式相对导入(即 import .Module2),调用 ./run.py 将 运行 MainModule 正确。