2015-05-09 369 views
1

我試圖運行一個扭曲的程序,它提供一些請求,並通過WSGI運行一個Django應用程序,並向它發送一些請求。文件夾結構是這樣的:從扭曲運行Django導入錯誤

code 
    |-- __init__.py 
    |-- main.py 
    |-- django_proj 
    |  |-- __init__.py 
    |  |-- manage.py 
    |  |-- django_proj 
    |  |  |-- __init__.py 
    |  |  |-- settings.py 
    |  |  |-- ... 
    |  |-- django_app 
    |  |  |-- __init__.py 
    |  |  |-- models.py 
    |  |  |-- ... 

現在,在django_proj/django_proj/settings.py我有這樣一行:

INSTALLED_APPS = (
    ... 
    'django_proj.django_app', 
    ... 
) 

,我運行程序,當我在code文件夾是這樣的:python ./main.py,它運行沒有問題。但是當我需要使用manage.py運行某些內容時,例如運行manage.py migrate我需要進入code/django_proj文件夾並運行它;但隨後說:

ImportError: No module named django_app 

,我需要在INSTALLED_APPS改變行:

INSTALLED_APPS = (
    ... 
    'django_app', 
    ... 
) 

但是如果我離開它這樣,我不能運行python ./main.py!因爲它會說:

ImportError: No module named django_app 

所以到現在爲止,我用來改變此行回&提出基於我所需要的那一刻做。
我該怎麼做才能解決這個問題?

回答

1

兩種解決方法:將manage.py移至code(推薦)。

或者:使用python -m django_proj.manage

無論您選擇什麼,您都必須將所有相對進口更改爲絕對進口。也就是說,從django_proj.settingsdjango_proj.django_proj.settings

相對進口是討厭的,並導致你現在遇到的那種問題。 (這是爲什麼相對進口已從Python 3中刪除的原因。)

有關更多信息,請參閱this answerMartijn Pieters


我現在看到你code__init__.py。它真的需要嗎?如果沒有,請將其刪除。如果需要,那麼即使使用我的解決方案,您仍然會使用相對於code的導入。

這意味着您必須將所有腳本移出code,並將所有導入的前綴都用code加上前綴。

+0

第二種方式:它給了我'ImportError:沒有模塊命名設置' – sazary

+0

第一種方式也是這樣說的。 – sazary

+0

@sazary:更新回答 –