2013-01-18 44 views
2

想象我有这样的结构:如何使用此结构在Python中执行相对导入?

dir/ 
    __init__.py 
    dir1/ 
     __init__.py 
     x.py 
    dir2/ 
     __init__.py 
     y.py 

现在我想导入x.py到y.py。
我尝试这个from ..dir1.x import *PEP 328 y.py但我得到这个错误Attempted relative import in non-package
我搜索了几个小时,但找不到任何对此问题的答案。
有像我的很多类似的问题,但他们都不能帮我像this
请帮助。
非常感谢。因为他们有__name__ == '__main__',而不是他们的全包名

python y.py 

:当文件被直接invocated

+0

在表面看起来像是你链接到的另一个问题的完全重复;你可能应该解释为什么这个解决方案不适合你。 –

+0

你是对的,但如果我知道问题是什么,我不要再问它。我再次问这个问题找到问题。 – user31587

回答

0
y.py

,加上这块导入代码

import sys 
sys.path.insert(0, '..') 

然后做

from dir1.x import * 
+0

非常感谢,但第一次导入是做什么的?我认为这是工作,但它不是干净的方式来做到这一点。 – user31587

+0

@XLichking首先导入以确保父目录位于您的python的搜索路径下,以便它可以将dir1识别为导入的有效模块。它看起来并不简单,因为你首先要求的并不是自然而然的事情。 – nye17

+0

非常感谢,但我怎么能改变我的结构是正常的? – user31587

0

相对进口量将无法正常工作。

对于相对进口工作,你必须使用y作为一揽子:

python -m dir.dir2.y 
+0

非常感谢。但我是新来的蟒蛇。我怎么能运行最后的命令?我使用Windows。 – user31587

+0

好吧,你如何运行失败的命令? –

+0

我在cmd中使用python文件夹:python -mc:\ Users \ my_user_name \ Desktop \ dir \ dir2 \ y但是我得到这个错误:没有模块命名为c:\ Users \ my_user_name \ Desktop \ dir \ dir2 \ y – user31587