如何从子目录导入模块

How to import a module from sub directory

我无法从 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

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

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

sub.__init__.py

from .aname import print_func

但是你还需要在 main.py 中导入 print_func 否则当你尝试执行 print_func:

时你会得到一个 NameError

main.py

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

print_func('zz')

您的 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