Python - 相对导入

时间:2013-04-27 17:06:11

标签: python import

我正在开发一个Python程序,它管理和运行模块(.py python文件),这些模块可以由用户添加并通过import函数导入主程序(foo.py)。这是目录结构

Foo/
    foo.py #Main script. Imports ouput.py, core.py and bar.py when needed.
    src/
        __init__.py
        output.py #Output functions required by bar.py and foo.py
        core.py
    modules/
        __init__.py
        bar.py #Needs output.py

我可以使用

导入foo.py.
from src.output import *

但我遇到的问题是当我尝试使用

从bar.py导入output.py时
from ..src.output import *

我收到错误

ValueError: Attempted relative import beyond toplevel package

我将文件放在不同的目录中,因为它使不同的程序员更容易单独编码,我肯定需要一个文件夹'modules'或者可以添加.py模块文件并在bar中使用其功能的东西。 py

如果我做错了,请告诉我。并随意提出一个更好的方法来做到这一点。

谢谢。

1 个答案:

答案 0 :(得分:4)

问题是因为Foo没有__init__.py,所以它不被视为包。

相对导入中的每个句点都指包。当你这样做

from ..src.output import *

bar.py中,第一个句点指的是当前包modules。第二个时期是指Foo之上的包。由于Foo实际上不是包,因此会出错。

P.S。通配符导入不受欢迎。特别是当您从这样一个远程相关的包中导入时,我会尝试将其重构为显式导入。