![](/img/trans.png)
[英]python importlib.import_module requires explicitly imported module
[英]the importlib.import_module has strange behavior in python3.5
具有相對模塊名稱的importlib.import_module
有時會失敗。
例如,我有一個這樣的包結構:
├── test0
│ ├── __init__.py
│ ├── test1.py
│ └── test2.py
├── test_impl.py
測試代碼如下:
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.5中,它將無法通過第一個測試:
$ 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=
在python3.6中,它可以工作:
$ python3 test_impl.py
sys.version_info(major=3, minor=6, micro=4, releaselevel='final', serial=0)
import OK: module=.test1, pkg=test0
import OK: module=test0.test1, pkg=
import OK: module=.test1, pkg=test0
import OK: module=test0.test1, pkg=
這是預期的還是錯誤? 更新:Python2.7.12與3.6具有相同的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.