1

我的目录结构如下

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

当我尝试使用 python testing.py 从目录 microblog/settings 中的命令行运行 testing.py

from .base import *
ValueError: Attempted relative import in non-package

为什么这不起作用。设置目录是一个带有init .py 的有效包。仅当我更改

from .base import *

from base import *

当我从命令行运行带有相对导入的“testing.py”包时,我试图了解为什么相对本地导入失败并给出 ValueError。

4

1 回答 1

2

这篇文章中 icyrock 的回答准确地阐明了我对 python“repl”的不理解。

在我运行时的目录微博/设置中

python testing.py

它实际上将测试放在包“main”中,它不知道测试是包“设置”的一部分。而是使用此将“testing.py”作为模块作为其正常包层次结构的一部分运行

python -m microblog.settings.testing 

在没有任何 ValueError 的情况下运行它,因为现在 python 知道“测试”是包“设置”的一部分,其中相对本地导入“来自 .base 导入 *”非常有意义。

于 2013-04-19T22:17:25.410 回答