Python从子目录导入

时间:2015-06-10 19:49:45

标签: python

我的文件设置如下:

  • 主/ main.py
  • 主/副/ foo.py
  • 主/副/ bar.py

main有import sub.foo,foo有import sub.bar

python main运行正常。但是python sub\foo不起作用,它无法识别sub中的import sub.bar。我希望能够自己运行main以及foo,我怎样才能在python3.4.1中正确运行?

编辑: 如果我将foo更改为import bar,则python main表示它无法识别import sub.foo中的栏

2 个答案:

答案 0 :(得分:1)

运行python main.py时,它可以工作,因为输入脚本的目录位于main/目录中,因此找到了相对于该目录的所有模块。

直接运行foo.py时,相对于sub目录,没有名为foo.py的子目录。

一种解决方法是import bar,因为它与foo位于同一目录中。但是,如果foo.pybar.py位于不同的目录中,则会失败。

如果要直接运行foo.py,请尝试将main/目录添加到模块搜索路径中。例如,在foo.py

# foo.py
import sys
import os
if __name__ == '__main__':
    foo_dir = os.path.dirname(os.path.realpath(__file__))
    parent_dir = os.path.dirname(foo_dir)
    sys.path.append(parent_dir)

import bar

答案 1 :(得分:0)

您可以使用__ init__.py(不含空格)

例如,在“main / main.py”上仅使用:

#main.py    
import sub

使用此路径“main / sub / __ init __。py”

创建一个新文件
#__init__.py
import foo
import bar