7

我有一个包含 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.py和中的代码backend/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在所有文件夹中都有。怎么了?

4

1 回答 1

5

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

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

于 2013-03-22T12:31:09.170 回答