症状:
无法导入tinycomm.views。错误是:没有名为models的模块
代码行:
from tinycomm.models import *
项目结构:
/tinycomms
/tinycomm
models.py
views.py
etc.
/other apps.
在开发中的Mac OS X我可以通过put tinycomms.tinycomm.models解决这个问题,然后在其他地方弹出另一个类似的错误。我通过在应用程序中更改大约10条模型和表单的路径来开发工作(更多的路径仍然像tinycomm.module一样),每次它都会改变路径。
我上传到Ubuntu生产服务器并遇到了同样的问题,只有全名无法解决问题。
这个应用程序已经运行好几个月,我能想到的唯一重大变化是在Mac OS X上安装Aptana Jaxer,但由于生产中也存在问题,我不确定是什么问题
其他一些重大变化是将应用程序文件夹名称从“web”更改为“tinycomm”,但是在开发过程中有完整的路径修复,它正在运行,所以我不确定是否也是原因。
以下列出了我尝试的内容:
No module named x
保持不变。以下是完整输出:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8004/
Django Version: 1.2 alpha 1
Python Version: 2.5.2
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'tinycomms_tagging',
'tinycomm']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_authopenid.middleware.OpenIDMiddleware')
Traceback:
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
90. request.path_info)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in resolve
222. sub_match = pattern.resolve(new_path)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in resolve
129. return self.callback, args, kwargs
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in _get_callback
138. raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e))
Exception Type: ViewDoesNotExist at /
Exception Value: Could not import tinycomm.views. Error was: No module named models
任何有关下一步尝试的建议都会感激不尽!
tinycomm / init的内容 .py:
from django.utils.translation import ugettext as _
from tinycomms_tagging.managers import ModelTaggedItemManager, TagDescriptor
VERSION = (0, 3, 'pre')
class AlreadyRegistered(Exception):
"""
An attempt was made to register a model more than once.
"""
pass
registry = []
def register(model, tag_descriptor_attr='tags',
tagged_item_manager_attr='tagged'):
"""
Sets the given model class up for working with tags.
"""
if model in registry:
raise AlreadyRegistered(
_('The model %s has already been registered.') % model.__name__)
registry.append(model)
# Add tag descriptor
setattr(model, tag_descriptor_attr, TagDescriptor())
# Add custom manager
ModelTaggedItemManager().contribute_to_class(model,
tagged_item_manager_attr)
答案 0 :(得分:1)
检查您的代码,看看您从tinycomms开始导入的某个地方。*(注意“s”)而不是tinycomm。*。有时,当您将相对导入与绝对导入混合时,会出现类似的奇怪错误。
答案 1 :(得分:1)
确保您没有在tinycomm.views.*
中导入tinycomm.models
,循环依赖,例如抛出这些错误。
tinycomm/__init__.py
中有什么东西吗?
修改强>:
追溯表明它可能来自您的utls.py
或其中一个include()
。您可以尝试评论一些网址模式,看看会发生什么。
如果这没有帮助,这里有一个简单的方法来搜寻循环导入(非显而易见的导入)和类似的导入问题,可能会对你有所帮助:
当您找到导致导入错误的文件时,请尝试删除(注释掉)该文件中的所有import语句:您应该最终得到一堆NameErrors。然后,开始逐个添加导入,当您获得ImportError而不是NameError时,只需按照导入并使用导入的文件执行此操作。希望这会有所帮助。