[英]Why can `__init__.py` import a submodule but a test file with `from module import *` can't?
我有以下文件夹结构。
project/
sandbox.py
module/
__init__.py
klass.py
__init__.py
具有以下内容:
from klass import Klass
if __name__ == '__main__':
'do stuff'
这很好。 sandbox.py
看起来像这样:
from module import *
if __name__ == '__main__":
'do similar stuff'
在命令行中,在project
目录中时:
$ python module/__init__.py
# things work correctly
$ python sandbox.py
Traceback (most recent call last):
File "sandbox.py", line 1, in <module>
from module import *
File "/Uses/chuck/.../project/module/__init__.py, line 1 in <module>
from klass import Klass
ImportError: No module named 'klass'
我认为这可能与相对导入有关,并尝试from klass import Klass
更改from .klass import Klass
,但这也不起作用。
我的目标是,从模块外部的文件中,可以from module import *
或from module import Klass
。 我需要做什么?
万一重要,在虚拟环境中的macOS下使用Python 3.5.2。
为此,请使用绝对路径和__main__.py
文件:
from module.klass import Klass
'do stuff'
在__init__.py
:
from .klass import Klass
现在,您可以按以下方式执行它:
$ python sandbox.py
do similar stuff
$ python -m module
do somthing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.