在我的Django项目中,我有一个名为profile
的应用程序,它主要包含我的profile.models.UserProfile
类,以获取有关User
个对象的更多信息(对于Django人来说似乎很熟悉)。现在我已经将一些初始化代码放入profile/__init__.py
(某些信号)并遇到了问题:Django告诉我还没有找到名为hotshot_profile
的表。
经过几个小时的搜索,我将问题追溯到导入订单。正在运行python -v manage.py test
我发现了以下内容:
import nose.plugins.prof # precompiled from /home/rassie/.virtualenvs/myproject/lib/python2.6/site-packages/nose/plugins/prof.pyc
import hotshot # directory /usr/lib64/python2.6/hotshot
import hotshot # precompiled from /usr/lib64/python2.6/hotshot/__init__.pyc
dlopen("/home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so", 2);
import _hotshot # dynamically loaded from /home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so
import hotshot.stats # from /usr/lib64/python2.6/hotshot/stats.py
import profile # directory /home/rassie/MyProject/apps/profile
import profile # precompiled from /home/rassie/MyProject/apps/profile/__init__.pyc
所以我的Nose跑步者导入nose.plugins.prof
(即使此插件已关闭),导入hotshot
,尝试导入profile
。但是,profile
从我的项目导入,而它已准备就绪,应从系统Python导入。
显然,我自己的profile
模块与系统profile
模块冲突。我显然不能从我自己的编程中排除与Python捆绑在一起的每个模块名称。所以问题是,我从哪里开始?我是否必须为所有应用创建myproject
命名空间? Django会与之合作吗?
PS:表格的名称hotshot_profile
似乎来自于另一个尚未完全分析的命名冲突,其中包含来自Profile
的{{1}}类,我也在使用在我的项目中。但这不属于这个问题的范围。
答案 0 :(得分:5)
您永远不应以import mymodule
(相对导入)的形式导入您自己的模块。相反,您应该始终使用import myproject.mymodule
(绝对导入)。这可以避免所有名称冲突。