2012-04-07 68 views
1

我正在研究一个Python应用程序,它由一个核心和多个使用核心的独立模块组成。我在设置包的相对导入时遇到困难。Python包:相对导入

app 
    |- __init__.py 
    |- core 
     |- __init__.py 
     |- corefile.py 

    |- module1 
     |- __init__.py 
     |- main.py 

__init__.py文件是空的。我正在运行Python 2.7.1。

main.py 
from .core import * 

运行python main.py结果ValueError: Attempted relative import in non-package

类似的问题:Ultimate answer to relative python importsHow to do relative imports in Python?Relative imports in Python

感谢您的帮助。

回答

1

总之,您只能使用自己导入的包的相对导入。

例如,如果您有:

$ cat run.py 
from app.module1 import main 
main.main() 
$ python run.py 

然后,你可以在app/module1/main.py使用相对导入(尽管它需要是from ..core import foo,因为core/高于main.py一个级别)。

+0

这取得了一些进展,但现在我得到'ValueError:试图相对导入超出顶层包'。打印'__name__'会产生'module.main'而不是'app.module.main'。为什么它没有看到它上面的目录作为包的一部分? – mgold 2012-04-07 23:42:54

+0

你究竟如何导入它?你是从'app'内的东西导入它作为'module.main'吗? – 2012-04-08 02:24:49

+0

我设法想出了一个稍微俗气的解决方案,涉及尝试不同的路径。按照您的建议,我也从顶层调用'module.main',所以我会继续并关闭它。 – mgold 2012-04-09 00:47:40