【发布时间】:2017-08-02 12:14:42
【问题描述】:
假设我使用的是 Python 3(因此是绝对导入),我的目录结构如下所示:
> package:
> sub_directory
__init__.py
sub_dir_file.py
sub_dir_file2.py
__init__.py
main_dir_file.py
在文件sub_dir_file.py 中,我希望从sub_dir_file2.py 导入一个函数。问题是,我希望能够使用__name__ == '__main__' 运行sub_dir_file.py,以及 将其导入main_dir_file.py。因此,如果在 sub_dir_file.py 我使用相对导入:
from .sub_dir_file2 import some_function
从main_dir_file.py 运行时,模块执行得非常好,但直接执行时会抛出错误(因为在__name__ == '__main__' 时无法执行相对导入。但是,如果我使用普通的绝对导入,sub_dir_file.py 将执行为一个 main,但不能从 main_dir_file.py 导入。
解决这个问题的最优雅的方法是什么?一个明显的解决方案似乎是:
if __name__ == '__main__':
from sub_dir_file2 import some_function
else:
from .sub_dir_file2 import some_function
但是,它似乎不是很pythonic。
【问题讨论】:
标签: python python-3.x import python-import