我的目录结构如下
microblog/__init__.py
urls.py
views.py
wsgi.py
settings/__init__.py
testing.py
base.py
local.py
在testing.py中我有一个相对导入
from .base import *
...
...more code
当我尝试从目录微博/设置中的命令行运行testing.py时 python testing.py
from .base import *
ValueError: Attempted relative import in non-package
为什么这不起作用。 settings目录是一个包含 init .py的有效包。我没有从命令行获取ValueError如果我改变了
from .base import *
到
from base import *
我试图理解为什么相对本地导入失败并在运行“testing.py”包并在命令行中使用相对导入时给出ValueError。
答案 0 :(得分:2)
this post中的icyrock的回答清楚地阐明了我对python“repl”的理解。
在我运行的目录微博/设置中
python testing.py
它实际上将测试放在包“main”中,并且它不知道测试是包“设置”的一部分。而是使用此
将“testing.py”作为其正常包层次结构的一部分运行python -m microblog.settings.testing
运行它没有任何ValueError因为现在python知道“testing”是包“settings”的一部分,其中相对本地导入“from .base import *”非常有意义。