【发布时间】:2013-04-13 09:48:42
【问题描述】:
我的目录结构如下
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
当我尝试从 microblog/settings 目录中的命令行运行 testing.py 时,使用 python testing.py
from .base import *
ValueError: Attempted relative import in non-package
为什么这不起作用。设置目录是带有 init.py 的有效包。仅当我更改
from .base import *
到
from base import *
当我从命令行运行带有相对导入的“testing.py”包时,我试图了解为什么相对本地导入失败并给出 ValueError。
【问题讨论】:
-
我认为这个问题已经得到解答..我刚刚看到stackoverflow.com/questions/9123062/…。正如 icyrocks 回答所说,当我运行 python testing.py 时。然后它会自动认为包是“主要的”。要从命令行运行具有真实导入的包,我需要执行“python -m microblog.settings.testing”
-
“为什么这不起作用。”错误信息告诉你原因!您正在从
testing导入的脚本不是包。 -
好吧,它说测试是一个非包,对我来说没有意义,因为我认为测试是包设置的一部分..但正如你所说,我没有意识到“测试”实际上是在独立运行时的“main”包。 icyrock 的回答为我澄清了这一点。关于 stackoverflow 的许多其他问题解决了相对导入的不同方面,这在我的案例中并不适用,因为我确实在一个带有 bonafide dunder init.py 的包中进行了测试。
-
即使作为包的一部分导入,
testing也不是包,它是在包settings。
标签: python