具有相对模块名称的substring
有时会失败。
例如,我有一个像这样的包结构:
importlib.import_module
测试代码如下:
├── test0
│ ├── __init__.py
│ ├── test1.py
│ └── test2.py
├── test_impl.py
在Python3.5中,第一次测试失败:
import importlib
import sys
print(sys.version_info)
def test_imp_module(module_name, pkgname):
try:
_m = importlib.import_module(module_name, pkgname)
print("import OK: module={}, pkg={}".format(module_name, pkgname))
except Exception as e:
print(e)
test_imp_module(".test1", "test0")
test_imp_module("test0.test1", "")
if __name__ == '__main__':
test_imp_module(".test1", "test0")
test_imp_module("test0.test1", "")
在python3.6中它可以工作:
$ python3 test_impl.py
sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)
Parent module 'test0' not loaded, cannot perform relative import
import OK: module=test0.test1, pkg=
import OK: module=.test1, pkg=test0
import OK: module=test0.test1, pkg=
这是预期还是错误? 更新: Python2.7.12与3.6具有相同的行为。
答案 0 :(得分:3)
docs说:
importlib.import_module(name, package=None)
...
在版本3.3中更改:自动导入父包。
因此,3.6.4行为是正确的,3.5.2行为是错误的。 你似乎正在点击#30876,问题是在版本5微修复,即v3.5.5。
在finding the ticket的房间6中归功于 vaultah 。