可能重复:如何在Python模块中正确使用相对或绝对导入?
我有这个文件布局,如下例所示:(在这里下载:http://www.mediafire.com/?oug42nzvxrvoms4)http://www.python.org/dev/peps/pep-0328/#guido-s-decision
moduleX包含:
from .moduleY import spam
from .moduleY import spam as ham
from . import moduleY
from ..subpackage1 import moduleY
from ..subpackage2.moduleZ import eggs
from ..moduleA import foo
from ...package import bar
from ...sys import path
这就是:
C:\package\subpackage1>python moduleX.py
Traceback (most recent call last):
File "moduleX.py", line 1, in <module>
from .moduleY import spam
ValueError: Attempted relative import in non-package
我有python 2.7.2 . 我有
__init__.py
每个目录中的文件 . 为什么这段代码不起作用?
1 回答
来自文档:
你可以看到这个:
通过将其作为
python moduleX.py
运行,您正在完成上述操作 . 相反,试试这个:这将导入moduleX并将顶级放在包中 . 从层次结构的顶部运行:
即在你的情况下直接来自
c:\
:请注意一件事 -
moduleX.py
中的导入是:倒数第二个:
需要根文件夹(在您的情况下为
c:\
)作为包(即具有__init__.py
) . 此外,它需要在package\__init__.py
中定义的bar变量,该变量当前不存在(因此将bar = 'bar!'
放在那里进行测试) . 它还要求你升级一级 - 所以你必须将package
文件夹放在另一个文件夹中(所以最终得到c:\toppackage\package
)并运行c:\python -m toppackage.package.subpackage1.moduleX
.对于这一行:
上面的PEP 328链接中有一个注释:
另请参阅有关此内容的其他SOq可能会有所帮助:
How to do relative imports in Python?
Can anyone explain python's relative imports?
How to accomplish relative import in python
python relative import weirdness
Relative imports in Python
希望这可以帮助 .