绝对导入 - 找不到模块
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
里面
- 执行包内的脚本。您的主脚本应该在 外部 绝对导入工作的包之外。否则你最终可能会得到同一个脚本的两个副本,绝对导入和相对导入。
我正在尝试以一种可以使用绝对导入的方式来组织我的脚本,而无需附加到 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
里面
- 执行包内的脚本。您的主脚本应该在 外部 绝对导入工作的包之外。否则你最终可能会得到同一个脚本的两个副本,绝对导入和相对导入。