首页 > 解决方案 > 如何导入兄弟姐妹以便 python 可以同时运行文件和下行脚本?

问题描述

import在以下情况下,我不确定如何整理我的陈述:

main.py
folder/
      __init__.py
      a.py
      b.py

a.py

class Base(object):
    pass

b.py

from a import Base  # If I do this, `python main.py` fails with "ModuleNotFoundError: No module named 'a'"
from .a import Base # But if I do this, `python b.py` or `python folder/b.py` fails with "ModuleNotFoundError: No module named '__main__.a'; '__main__' is not a package"

class Kid(Base):
    pass

if __name__ == "__main__":
    # Toy around with Kid (informal test, debug, snippets, etc.)
    k = Kid()

main.py

from folder.b import Kid
# Main script with Kid.
k = Kid() 

我有时想运行main.py,因为它是我的主程序。
但有时我想运行它,因为它更简单,并且它包含小片段和示例,可以在文件打开时 b.py与我的类一起玩。Kid

我认为两者都想要是合法的,否则共同的构造就没有意义了if __name__ == '__main__':

什么是正确的进口b.py?有没有一种巧妙的方法可以让我享受这两种选择的最佳效果?

标签: pythonpython-3.ximportrelative-path

解决方案


Python 导入可能会变得很荒谬,并且想要以多种方式使用模块会变得很棘手。最简单的方法就是尝试/抓住它

try:
    from a import Base
except ModuleNotFoundError:
    from .a import Base

推荐阅读