如何从子目录

时间:2017-07-10 10:44:49

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

我无法从python中的子目录导入模块。以下是我的项目结构。

./main.py
./sub
./sub/__init__.py
./sub/aname.py

当我运行python main.py时,我收到了此错误:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    import sub.aname
  File "/Users/dev/python/demo/sub/__init__.py", line 1, in <module>
    from aname import print_func
ModuleNotFoundError: No module named 'aname'

我不知道加载模块aname失败了。以下是源代码:

main.py

#!/usr/bin/python

import sub.aname

print_func('zz')

sub/__init__.py

from aname import print_func

sub/aname.py

def print_func( par ):
   print ("Hello : ", par)
   return

我在MacOS上使用python 3.6.0

3 个答案:

答案 0 :(得分:0)

from sub import aname
aname.print_func('zz')

答案 1 :(得分:0)

最优雅的解决方案可能是在子模块中使用相对导入sub

sub.__init__.py

from .aname import print_func

但您还需要导入print_func中的main.py,否则当您尝试执行NameError时,您将获得print_func

main.py

from sub import print_func   # or: from sub.aname import print_func

print_func('zz')

答案 2 :(得分:0)

Python脚本中存在多个错误。

相对导入

首先,要进行相对导入,必须使用前导点(请参阅Guido's Decision关于相对导入语法)。

sub/__init__.py中,替换:

from aname import print_func

使用:

from .aname import print_func

导入功能

要从给定模块导入函数,您可以使用from ... import ...语句。

main.py中,替换:

import sub.aname

使用:

from sub import print_func