【发布时间】:2020-05-05 21:28:21
【问题描述】:
假设我有以下程序结构:
.
├── main.py
└── mypack
├── __init__.py
└── mymod.py
在mypack 包中,可以使用以下语法在(子)模块中导入对象:from .mymod import f
mypack/__init__.py:
from .mymod import f
print(f'Hello: __name__: {__name__}, __package__: {__package__}, __file__: {__file__}')
但是,如果我尝试导入完整的(子)模块,则会收到以下语法错误:
import .mymod
Traceback (most recent call last):
File "main.py", line 1, in <module>
import mypack
File "/Users/nlykkei/python-demo/mypack/__init__.py", line 1
import .mymod
^
SyntaxError: invalid syntax
另外,如果我尝试使用非相对语法导入模块,它会失败:
import mymod
Traceback (most recent call last):
File "main.py", line 1, in <module>
import mypack
File "/Users/nlykkei/python-demo/mypack/__init__.py", line 1, in <module>
import mymod
ModuleNotFoundError: No module named 'mymod'
如何将(子)模块导入到包的__init__.py 文件中?特别是,我想仅导入模块对象,不导入其所有包含的对象:from .mymod import *。
程序输出:
$ python3 main.py
Hello: __name__: mypack.mymod, __package__: mypack, __file__: /python-demo/mypack/mymod.py
Hello: __name__: mypack, __package__: mypack, __file__: /python-demo/mypack/__init__.py
Hello: __name__: __main__, __package__: None, __file__: main.py
【问题讨论】:
-
你试过
from mymod import f吗?
标签: python python-3.x module pip package