gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:04:00 26 4
gpt4 key购买 nike

在我的 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 runner 导入了 nose.plugins.prof (即使此插件已关闭),导入 hotshot , 它试图导入 profile .然而,profile我的项目导入,而它准备好应该从系统 Python 导入。

显然,我自己的 profile模块与系统冲突 profile模块。我显然不能从我自己的编程中排除每个与 Python 捆绑在一起的模块名称。所以问题是,我从这里去哪里?我必须创建一个 myproject 吗?我所有应用程序的命名空间? Django 会使用它吗?

PS:表名hotshot_profile似乎来自与 Profile 的进一步尚未完全分析的命名冲突来自 pybb 的类(class),我也在我的项目中使用。但这超出了这个问题的范围。

最佳答案

你永远不应该以import mymodule(相对导入)的形式导入你自己的模块。相反,您应该始终使用 import myproject.mymodule(绝对导入)。这避免了所有名称冲突。

关于python - 如何避免 Python 模块系统中的命名冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8171225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com