假设我有一个具有以下结构的 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.py
和 submain.py
中,我导入了 Agent 类。我希望能够从 main.py
和 submain.py
开始我的程序。但是,这会导致 subagent.py
文件出现问题。如果我从 main.py
开始,我必须像这样在 subagent.py
中编写导入:
from subfolder1.subnetwork import Network
但是,如果我从 submain.py
开始,我必须像这样在 subagent.py
中编写导入:
from subnetwork import Network
有没有优雅的解决方案来解决这个问题?
答案 0 :(得分:1)
使用绝对导入,即以 folder1
开头:from folder1 import ...
或 import folder1
。像这样调用您的电源:python -m folder1.main
和 python -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