我有一个包含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
中的代码正被api
和scheduled
中的模块使用。
我有像
这样的代码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
。有什么问题?
答案 0 :(得分:5)
当您运行python register.py
时,您的backend/register.py
文件将用作程序的__main__
模块,而不是backend
包中的模块。此外,Python导入路径不会自动包含包含backend
目录的目录,这可能是导致问题的原因。
可能有效的一个选项是从项目的顶级目录运行程序python -m backend.register
(或设置PYTHONPATH
,以便找到此模块)。这将在正常导入路径上搜索脚本,然后将其作为主程序运行。