如何从子目录导入模块
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
我无法从 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