2013-02-11 70 views
0

我收到以下錯誤:劃分模型成多個文件的Python導入包/分裝

Error: ImportError: No module named models.account 

我試圖拆了我的模特。

這裏是我的項目結構:

site 
    | site 
    | | models 
    | | | __init__.py 
    | | | account.py 
    | | views 
    |  | __init__.py 
    |  | site.py 
    | __init__.py 
    | resources.py 
    | routes.py 
    | security.py 

網站/網站/視圖/ site.py

from pyramid.view import view_config 
from pyramid.httpexceptions import HTTPFound 
from site.models.account import User 


@view_config(context='pyramid.httpexceptions.HTTPForbidden', 
     renderer='generic/login.mako') 
@view_config(route_name='generic_login', renderer='generic/login.mako') 
def login(request): 
    if request.scheme == 'http': 
    request.scheme = 'https' 
    #return HTTPFound(location=request.url) 

    if 'form.submitted' in request.params: 
    uemail = request.params['email'] 
    pw = request.params['pass'] 

    user = User.objects(email=uemail).first() 

    return {} 

路徑

/Volumes/workspace/py/website/site/bin 
/Volumes/workspace/py/website/site/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg 
/Volumes/workspace/py/website/site/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg 
/Volumes/workspace/py/website/site/lib/python2.7/site-packages/WebError-0.10.3-py2.7.egg 
/Volumes/workspace/py/website/site/lib/python2.7/site-packages/Pygments-1.6-py2.7.egg 
/Volumes/workspace/py/website/site/lib/python2.7/site-packages/Tempita-0.5.1-py2.7.egg 
/Volumes/workspace/py/website/site/site 
/Volumes/workspace/py/website/site/lib/python2.7/site-packages/WebHelpers-1.3-py2.7.egg 
/Volumes/workspace/py/website/site/lib/python27.zip 
/Volumes/workspace/py/website/site/lib/python2.7 
/Volumes/workspace/py/website/site/lib/python2.7/plat-darwin 
/Volumes/workspace/py/website/site/lib/python2.7/plat-mac 
/Volumes/workspace/py/website/site/lib/python2.7/plat-mac/lib-scriptpackages 
/Volumes/workspace/py/website/site/lib/python2.7/lib-tk 
/Volumes/workspace/py/website/site/lib/python2.7/lib-old 
/Volumes/workspace/py/website/site/lib/python2.7/lib-dynload 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages 
/Volumes/workspace/py/website/site/lib/python2.7/site-packages 

我'新的Python這樣想圖這一點。

+0

觸發異常的代碼似乎不在您的示例代碼中。 – 2013-02-11 00:35:31

+0

哪裏是實際的進口報表?還附加'import sys的輸出; print(sys.path)'會有助於解決這個問題。 – ozk 2013-02-11 00:35:47

+0

對不起,它錯過了最重要的代碼! – slik 2013-02-11 00:40:42

回答

0

siteone of standard Python modules的名稱,更糟的是,它是一種特殊情況,在解釋器初始化過程中會自動導入。如果系統site模塊覆蓋了您的問題,則很可能是問題的原因。

您可以嘗試使用一些解決問題就像

from ..models.account import User 

但最終它是值得的重命名你的項目。

在Python混亂輸入錯誤的另一個常見問題是圓形模塊依賴關係 - 比如,如果你有

from site.views import blah 

某處你site.models模塊中,並在同一時間試圖做from site.models.account import Usersite.views這將導致在循環依賴中,基本上在違規導入語句之下的任何東西中都沒有定義。如果您無法找到循環導入,請更新您的問題,列出導入site.modelssite.views的所有地方。

+0

我厭倦了重命名該項目,並且問題仍然存在。 但來自..models.account import用戶的作品。這是我唯一的選擇嗎?是否有可能做project.models.account導入用戶? – slik 2013-02-11 01:34:21

+0

@slik:絕對有可能,大多數大而不平凡的項目都可以做到這一點。我已經更新了我的答案。 – Sergey 2013-02-11 01:53:23

+0

@slik:btw,在嘗試重命名項目時,是否也更改了導入語句? – Sergey 2013-02-11 01:54:33