可能重复:
如何在Python模块中正确使用相对或绝对导入?
我有这个文件布局,如下例所示:(在这里下载:http://www.mediafire.com/ ?oug42nzvxrvoms4) http://www.python.org/dev/peps/pep-0328/#guido- S-决定
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
Run Code Online (Sandbox Code Playgroud)
这就是:
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
Run Code Online (Sandbox Code Playgroud)
我有python 2.7.2.我有
__init__.py
Run Code Online (Sandbox Code Playgroud)
每个目录中的文件.为什么这段代码不起作用?
icy*_*com 22
来自文档:
你可以看到这个:
相对导入使用模块的name属性来确定模块在包层次结构中的位置.如果模块的名称不包含任何包信息(例如,它设置为' main '),则解析相对导入,就像模块是顶级模块一样,无论模块实际位于文件系统的哪个位置.
通过运行它python moduleX.py,您正在完成上述操作.相反,试试这个:
python -m package.subpackage1.moduleX
Run Code Online (Sandbox Code Playgroud)
这将导入moduleX并将顶级放在包中.从层次结构的顶部运行:
package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
moduleA.py
Run Code Online (Sandbox Code Playgroud)
即在你的情况下c:\直接:
c:\>python -m package.subpackage1.moduleX
Run Code Online (Sandbox Code Playgroud)
注意一件事 - 进口moduleX.py是这些:
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
Run Code Online (Sandbox Code Playgroud)
倒数第二个:
from ...package import bar
Run Code Online (Sandbox Code Playgroud)
要求根文件夹(c:\在您的情况下)是一个包(即有__init__.py).此外,它需要定义的bar变量package\__init__.py,目前不存在(所以放在bar = 'bar!'那里进行测试).它还要求你提升一级 - 所以你必须将package文件夹放在另一个文件夹中(所以你最终c:\toppackage\package)并运行c:\python -m toppackage.package.subpackage1.moduleX.
对于这一行:
from ...sys import path
Run Code Online (Sandbox Code Playgroud)
上面的PEP 328链接中有一个注释:
请注意,虽然最后一个案例是合法的,但肯定不鼓励("疯狂"是Guido使用的词).
另请参阅有关此内容的其他SOq可能会有所帮助:
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
17041 次 |
| 最近记录: |