2010-02-03 56 views
0

症狀:打破我的Django應用程序 - 路徑問題?

無法導入tinycomm.views。錯誤:沒有模塊名爲車型

的代碼行:

from tinycomm.models import * 

項目結構:

/tinycomms 
    /tinycomm 
    models.py 
    views.py 
    etc. 
    /other apps. 

在發展Mac OS X我可以把tinycomms.tinycomm.models解決這個問題然後在別處彈出另一個類似的錯誤。我通過在應用程序中更改大約10個模型和表單的路徑(更多仍然像tinycomm.module一樣),通過在每次崩潰時更改路徑來開發工作。

我上傳到Ubuntu生產服務器並遇到同樣的問題,只有全名不能解決問題。

這個應用程序一直工作好幾個月,我能想到的唯一重大變化就是在Mac OS X上安裝Aptana Jaxer,但由於問題在生產中也存在,所以我不確定這是問題所在。

其他更大的變化是將應用程序文件夾名稱從'web'更改爲'tinycomm',但開發中的完整路徑修復程序正在運行,所以我不確定這是什麼原因。

以下是我已經嘗試了事情的清單:

  1. 所有它說,它無法找到肯定,他們應該是
  2. 初始化的.py到處它應該是
  3. 文件
  4. 路徑到處添加的/ home/PROJECT_DIR,/家庭/ PROJECT_DIR/tinycomms,/家庭/ PROJECT_DIR/tinycomms/tinycomm
  5. 試圖消除所有這些路徑以及
  6. 嘗試逐個取出所有應用程序 - 其投訴的模塊已更改,但基本的No module named x保持不變。
  7. 取出所有的中間件等
  8. 升級到Django的1.2

以下是完整的輸出:

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的/ 初始化的.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) 
+2

呃,在「from tinycomm.models import」中是不是缺少的東西?你想要導入什麼? – kaleissin 2010-02-03 12:01:10

+0

對不起 - 爲清晰起見,我刪除了之後的很多模型列表!假設進口* – PhoebeB 2010-02-03 12:23:54

回答

1

確保你沒有在tinycomm.models中導入tinycomm.views.*,循環依賴就像拋出這類錯誤一樣。

順便說一句,你有什麼東西在你的tinycomm/__init__.py

編輯

回溯表明,它可能來自你的utls.py或它的一個include()秒。你可以嘗試評論一些url模式,看看會發生什麼。

如果沒有幫助,這裏的追捕圓形進口(非顯而易見的)和類似的問題,也許能幫助你一個簡單的方法:

當你發現哪些文件引起導入錯誤,請嘗試從該文件中刪除(註釋掉)所有的導入語句:您最終會遇到一堆NameErrors。然後,開始逐個添加回導入,並且當您得到ImportError而不是NameError時,只需按照導入操作,然後對導入的文件執行此操作。希望這可以幫助。

+0

令人遺憾的是沒有明顯的循環依賴,但我要回過去自上一版以來的所有更改,並查看是否有不太明顯的變化。 編輯過的問題包含tinycomm.__init__.py中的內容,但這個問題在很長一段時間內都沒有改變。 – PhoebeB 2010-02-03 18:34:00

+0

使用Gitx查看了我的所有更改,並且沒有添加任何循環引用。把舊版本重新放在生產和開發上,他們都做了一些明確的改變。今天不能面對更多的挫折 - 明天我會逐步完成許多改變。獲得的教訓 - 開發時創建一個git分支並每晚保存更改! – PhoebeB 2010-02-03 22:49:01

+0

好的,我剛剛更新了答案,也許這次它會幫助你。 – 2010-02-03 23:46:44

1

檢查你的代碼,看看你的地方進口量從tinycomms開始*(注意 「S」),而不是tinycomm *。有時,當你將相對進口與絕對進口混合在一起時,你會得到類似的奇怪錯誤

+0

沒有找到任何,但謝謝你的提示。 – PhoebeB 2010-02-03 18:28:48