2016-08-04 90 views
6

我想成爲一個小Django項目具有以下Apache配置:跟Apache的virtualenv和mod_wsgi的:導入錯誤:沒有模塊名爲「Django的

Apache的虛擬主機配置:

<VirtualHost *> 
    ServerName servername 

    [...] 

    <Directory "/path/to/project/project"> 
     <Files wsgi.py> 
      Require all granted 
     </Files> 
    </Directory> 

    WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages       
    WSGIScriptAlias//path/to/project/project/wsgi.py 

</VirtualHost> 

我也有以下wsgi.py:

import os 
from django.core.wsgi import get_wsgi_application 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings") 
application = get_wsgi_application() 

我沒有問題,爲靜態文件和媒體文件。

我也檢查了權限,並嘗試遞歸地使用755,然後777到我的virtualenv的站點包目錄。它沒有工作。

但是,試圖達到我的網站的根我得到以下時:

from django.core.wsgi import get_wsgi_application 
ImportError: No module named 'django' 

我猜測,這是一個Python的路徑相關的問題,因爲Django是安裝在我的virtualenv。但我添加了相關的Python路徑到WSGIDaemonProcesspython-path屬性,所以我不明白爲什麼它不起作用。

我也猜我可能add the relevant directory to my Python path in my wsgi.py by using the site module,但我想了解爲什麼我嘗試的Apache配置是不夠的。我錯過了什麼?

回答

15

由於缺少WSGIProcessGroup指令或WSGIScriptAlias的等效選項,因此您的應用程序實際上並未在您設置虛擬環境的守護程序進程組中運行。

Using mod_wsgi daemon mode

我還建議確保應用程序組設置爲「%{}全球」如果這是你的守護進程組中運行的唯一應用程序。

這樣使用:

WSGIScriptAlias//path/to/project/project/wsgi.py \ 
    process-group=project application-group=%{GLOBAL} 

而且最好使用python-home虛擬環境。

WSGIDaemonProcess project python-path=/path/to/project \ 
     python-home=/path/to/Envs/venv 

參見:

2

我代表不超過50個,所以我不能發表評論,但我想與大家分享我的發現。

在WSGIDaemonProcess,如果你正在使用Python 3.5,你需要設置完全一樣@格雷厄姆鄧普爾頓說,與

python-home=/path/to/Envs/venv 

明確設置。但是,如果您使用的是Python 3.4(或某些較舊版本的Python,如2。7據我所知),你必須將其配置爲

python-path=/path/to/project:/path/to/Envs/venv/lib/python3.4/site-packages 

就像提問者所做的一樣。

真的很奇怪。

+1

如果使用Python 3.4或2.7,你應該仍然使用''python-home''。我知道使用非首選設置「python-path」的方式沒有問題,但它不是你應該做的。 ''python-home''選項是長時間設置虛擬環境位置的最佳方式。只要有古老mod_wsgi版本的Linux發行版仍然可以工作。即使文檔可能尚未更新,情況也是如此。 :-) –

+0

@ graham-dumpleton感謝您的建議。但就我而言,我正在使用python 3.4,並且該設置是您提到的「python-home」方式。但是,我的網站無法訪問,因爲Apache不斷髮送錯誤「導入錯誤:無模塊名爲'站點'」。只要我將它配置爲「非首選方式」,就像提問者那樣使用「:」,這個問題就解決了。是的,對於Python 3.5,您應該使用「python-home」方式,或者[ImportError:沒有名爲'django'的模塊]問題會上升。 – Valorad

+0

這意味着您的mod_wsgi實際上並未針對該版本的Python進行編譯。您不能強制mod_wsgi使用不同於其編譯的Python版本。使用''python-path''的問題之一是,當你做錯了事情並且試圖強制mod_wsgi使用一個不同於python版本的虛擬環境而不是mod_wsgi被編譯時,它不會顯示出來。當使用''python-home''時,它會錯誤地正確告訴你你做錯了什麼。 –

相關問題