无法在子包中导入父包的模块

时间:2013-03-22 12:12:48

标签: python

我有一个包含2个子包的父包。看起来像这样

backend
   __init__.py
   conf.py
   db.py
   connections.py
   /api
      __init__.py
      register.py
      api.py
   /scheduled
      __init__.py
      helpers.py

All the __init__.py files are empty.

backend/connections.pybackend/conf.py中的代码正被apischeduled中的模块使用。

在register.py中的

我有像

这样的代码
from backend.conf import *
from backend.connections import *

现在我做python register.py 我收到此错误

ImportError: No module named backend.conf

此外,当我将from backend.conf import *更改为from ..conf import *from .. import conf时,我收到此错误

ValueError: Attempted relative import in non-package

我对上述错误的理解是python没有将上述文件夹视为包。但我在所有文件夹中都有__init__.py。有什么问题?

1 个答案:

答案 0 :(得分:5)

当您运行python register.py时,您的backend/register.py文件将用作程序的__main__模块,而不是backend包中的模块。此外,Python导入路径不会自动包含包含backend目录的目录,这可能是导致问题的原因。

可能有效的一个选项是从项目的顶级目录运行程序python -m backend.register(或设置PYTHONPATH,以便找到此模块)。这将在正常导入路径上搜索脚本,然后将其作为主程序运行。