如何避免在Python的模块系统中命名冲突?

Nik*_*nko 6 python django python-module python-import

在我的Django项目中,我有一个名为app的应用程序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
Run Code Online (Sandbox Code Playgroud)

所以我的Nose跑步者输入nose.plugins.prof(即使这个插件已关闭),导入hotshot,尝试导入profile.但是,profile我的项目中导入,而它应该已经从系统Python导入.

显然,我自己的profile模块与系统profile模块冲突.我显然不能从我自己的编程中排除与Python捆绑在一起的每个模块名称.所以问题是,我从哪里开始?我是否必须myproject为我的所有应用创建命名空间?Django会与之合作吗?

PS:Table的名称hotshot_profile似乎来自于另一个尚未完全分析的命名冲突,其中包含一个Profilepybb,我也在我的项目中使用它.但这不是这个问题的范围.

Joc*_*zel 5

您永远不应该在表单中导入您自己的模块import mymodule(相对导入).相反,你应该总是使用import myproject.mymodule(绝对导入).这可以避免所有名称冲突.