【发布时间】:2017-12-21 02:24:27
【问题描述】:
我是 python 新手,我很难克服导入系统的问题。
假设我的文件系统如下所示:
/src
/src/main.py
/src/submodules/
/src/submodules/submodule.py
/src/submodules/subsubmodules
/src/submodules/subsubmodules/subsubmodule.py
所有文件夹(src、submodules、subsubmodules)都有__init__.py文件并为空。
在 submodule.py 我有:
from subsubmodules import subsubmodule
在 main.py 我有:
from submodules import submodule
当我运行 submodule.py python 接受导入。但是当我运行 main.py 时,python 会为 subsubmodule.py 的导入引发错误,因为 /src/submodules/subsubmodules/ 文件夹不在路径中。
唯一的解决方案是将 submodule.py 的导入更改为
from submodules.subsubmodules import subsubmodule
在我看来,这似乎是一个糟糕的解决方案,因为在那之后我无法运行 submodule.py 并且我确信其他的东西是关键。
另一种解决方案是将以下代码添加到__init__.py 文件中:
import os
import sys
import inspect
cmd_subfolder = os.path.split(inspect.getfile(inspect.currentframe()))[0]
if cmd_subfolder not in sys.path:
sys.path.insert(0, cmd_subfolder)
有没有办法只使用 python 的导入系统而不是其他手动使用的方法来做到这一点,例如 sys.path 或其他模块,如 os、inspect 等?
如何导入模块而不关心它们导入的模块?
【问题讨论】:
标签: python-3.x