2016-11-04 64 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