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