任何人都可以解释python的相关进口?

问题:

我不能让我的生活让python的相对进口工作。我创建了一个不起作用的简单示例:
目录结构是:

/__init__.py
/start.py
/parent.py
/sub/__init__.py
/sub/relative.py

 /start.py只包含:import sub.relative
 /sub/relative.py只包含from .. import parent
所有其他文件为空。
在命令行执行以下命令时:

$ cd /
$ python start.py

我得到:

Traceback (most recent call last):
  File "start.py", line 1, in <module>
    import sub.relative
  File "/home/cvondrick/sandbox/sub/relative.py", line 1, in <module>
    from .. import parent
ValueError: Attempted relative import beyond toplevel package

我使用的是Python 2.6。为什么会这样?如何使这个沙盒示例工作?

回答:

您正从包“sub”导入。即使存在__init__.py存在,start.py本身也不在包中。
您需要从parent.py的一个目录启动您的程序

./start.py

./pkg/__init__.py
./pkg/parent.py
./pkg/sub/__init__.py
./pkg/sub/relative.py

使用start.py

import pkg.sub.relative

现在pkg是顶级包,你的相对导入应该可以工作。
如果你想坚持使用你当前的布局,你可以使用import parent。因为您使用start.py启动翻译器,所以start.py所在的目录位于您的python路径中。 parent.py作为一个单独的模块住在那里。
您还可以安全地删除顶级__init__.py,如果您不在目录树中进一步导入任何脚本。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Can anyone explain python’s relative imports?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 5 = 1