绝对导入 - 找不到模块

Absolute imports - module not found

我正在尝试以一种可以使用绝对导入的方式来组织我的脚本,而无需附加到 sys.path,使其尽可能容易地在不同的计算机上使用而不会出现问题。我已阅读并理解绝对路径是执行此操作的最合适方法。

我的文件夹结构如下所示:

main/
  __init__.py
  tools/
    __init__.py
    script1.py
  base/
    __init__.py
    script2.py

我一直在尝试在文件 main/base/script2.py 中执行 from main.tools.script1 import Foo,但我仍然收到错误 ImportError: No module named main.tools.script1

如果是打印sys.path,第一项是main/base/。 如果我在 main 的终端上 运行 python,我可以导入 tools.script1,但不能写 main.tools.script1.

其他的帖子我都看过了,但是这个我还是不太清楚。

MyNiceProgram-1.0/
    setup.py
    README
    LICENSE
    bin/ 
        myniceprogram.py # main entry point
    myniceprogram/
        __init__.py
        tools/
            __init__.py
            script1.py
        base
            __init__.py
            script2.py

然后你使用:

from myniceprogram.tools import script1
from myniceprogram.base import script2

不要

  • 将您的主包命名为 main - 它应该被视为一个全局包,因此名称应该是描述性的。如果你想要一个名为 main 的包,把它放在 myniceprogram.main
  • 里面
  • 执行包内的脚本。您的主脚本应该在 外部 绝对导入工作的包之外。否则你最终可能会得到同一个脚本的两个副本,绝对导入和相对导入。