绝对导入-找不到模块

时间:2018-07-09 18:11:10

标签: python python-2.7 python-import

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

我的文件夹结构如下:

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

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

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

我还阅读了其他文章,但对我来说仍然不清楚。

1 个答案:

答案 0 :(得分:-1)

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
  • 在包中执行脚本。您的主脚本应位于软件包的外部之外,这样才能绝对导入。否则,您最终将拥有两个相同脚本的副本,并且绝对且相对地导入。