如何从包内的两个不同文件夹导入一个模块,该模块导入另一个模块

时间:2021-01-15 10:51:33

标签: python python-3.x python-module python-packaging

假设我有一个具有以下结构的 python 包:

folder1
   __init__.py
   main.py
   subfolder1
      __init__.py
      submain.py
      subagent.py (contains class Agent)
      subnetwork.py (contains class Network)

subagent.py 文件中,我导入了 Network 类,在 main.pysubmain.py 中,我导入了 Agent 类。我希望能够从 main.pysubmain.py 开始我的程序。但是,这会导致 subagent.py 文件出现问题。如果我从 main.py 开始,我必须像这样在 subagent.py 中编写导入:

from subfolder1.subnetwork import Network 

但是,如果我从 submain.py 开始,我必须像这样在 subagent.py 中编写导入:

from subnetwork import Network 

有没有优雅的解决方案来解决这个问题?

3 个答案:

答案 0 :(得分:1)

使用绝对导入,即以 folder1 开头:from folder1 import ...import folder1。像这样调用您的电源python -m folder1.mainpython -m folder1.subfolder1.submain

答案 1 :(得分:0)

您可以使用 try except 块进行双向导入

try:
    from subnetwork import Network
except ModuleNotFoundError:
    from subfolder1.subnetwork import Network 

答案 2 :(得分:0)

更改工作目录?

import os

if __name__ == "__main__":  # Only change the working directory if the file is run directly
    os.chdir('..') # Move up a level so that it is the same as main
# now run the imports