2016-11-04 101 views
1

我有如下所示(可視化使用tree)目錄樹:在Python從「子子目錄」導入模塊3

. 
├── __init__.py 
└── testsubdir 
    ├── __init__.py 
    └── testsubsubdir 
     ├── __init__.py 
     └── __init__.pyc 

的在主目錄__init__.py包含命令import testsubdirtestsubdir中的__init__.py包含import testsubsubdir。我注意到的是,這部作品在Python 2.7,但不是在Python 3.5:

[email protected]:~/Documents/Scratch/testdir$ python __init__.py 
[email protected]:~/Documents/Scratch/testdir$ python3 __init__.py 
Traceback (most recent call last): 
    File "__init__.py", line 1, in <module> 
    import testsubdir 
    File "/home/kurt/Documents/Scratch/testdir/testsubdir/__init__.py", line 1, in <module> 
    import testsubsubdir 
ImportError: No module named 'testsubsubdir' 

我的工作「翻譯」一些源代碼在Python 2到Python 3包含類似於上述import語句。在Python 3中完成這項工作的最佳方式是什麼?

回答

3

This answer to a similar question建議使用相對導入:

在頂層__init__.py

from . import testsubdir 

testsubdir/__init__.py

from . import testsubsubdir 
+0

這是否對你的工作?我得到'ValueError:嘗試相對導入非包'的行'from。導入testsubdir'。 –

+1

@KurtPeek我通過在包'testdir'中放置頂層'__init __。py'並執行'import testdir'來測試。 – Leon

+1

@KurtPeek如果你想直接向python3提供頂級'__init __。py',那麼在'import testsubdir'中保留'import'語句。 – Leon