当我尝试在应用程序中导入某些内容时:
from app_name.models import something
我有导入错误, 我必须这样做:
from models import something
仅在项目中的众多应用程序之一中出现此问题。我应该改变什么?
答案 0 :(得分:1)
这可能是@Skirmantas建议的,app_name
不在PYTHONPATH
,或者你有一个包冲突,其他一些app_name
在app_name
之前PYTHONPATH
。
我的预感是,它可能是后者,你的应用程序与你使用的其他第三方应用程序具有相同的程序包名称;我曾在registration
上有两个顶级PYTHONPATH
个包。
如果您以registration
应用程序为例,我们通常会将您的项目打包成以下内容:
myproject/
myproject/
registration/
__init__.py
models.py
__init__.py
settings.py
urls.py
setup.py
这是一个community guideline应用程序应打包为“即插即用”兼容。它们应该是顶级包,并且应该能够通过像@Yuji建议的绝对路径来引用包内资源。如果您希望将您的应用与您的项目一起发送和打包,这意味着除了/myproject
之外,/myproject/myproject
也位于PYTHONPATH
。它甚至是enforced in some cases。
正如我所说的那样,你只是在打包包装名称。如果是这种情况,那么在这篇冗长的帖子之后,您应该明白,您唯一的选择是将您的包重命名为更独特的东西,但我永远不会有心直接将其泄露给某人。这是由于可悲的事实,我从来没有找到更合适的名称来替换registration
。
答案 1 :(得分:0)
抱歉,你为什么要改变它?
这样就更干了 - 你不是一遍又一遍地重复app_name - 如果你想在将来重命名它 - 它会更容易。
编辑:我的问题在下面得到解答,我显然不知道你应该总是使用完整路径导入。
至于直接回答,我有两个猜测(没有足够的信息来完全回答):
抱歉,我无法准确。