我想成爲一個小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路徑到WSGIDaemonProcess
的python-path
屬性,所以我不明白爲什麼它不起作用。
我也猜我可能add the relevant directory to my Python path in my wsgi.py by using the site
module,但我想了解爲什麼我嘗試的Apache配置是不夠的。我錯過了什麼?
如果使用Python 3.4或2.7,你應該仍然使用''python-home''。我知道使用非首選設置「python-path」的方式沒有問題,但它不是你應該做的。 ''python-home''選項是長時間設置虛擬環境位置的最佳方式。只要有古老mod_wsgi版本的Linux發行版仍然可以工作。即使文檔可能尚未更新,情況也是如此。 :-) –
@ graham-dumpleton感謝您的建議。但就我而言,我正在使用python 3.4,並且該設置是您提到的「python-home」方式。但是,我的網站無法訪問,因爲Apache不斷髮送錯誤「導入錯誤:無模塊名爲'站點'」。只要我將它配置爲「非首選方式」,就像提問者那樣使用「:」,這個問題就解決了。是的,對於Python 3.5,您應該使用「python-home」方式,或者[ImportError:沒有名爲'django'的模塊]問題會上升。 – Valorad
這意味着您的mod_wsgi實際上並未針對該版本的Python進行編譯。您不能強制mod_wsgi使用不同於其編譯的Python版本。使用''python-path''的問題之一是,當你做錯了事情並且試圖強制mod_wsgi使用一個不同於python版本的虛擬環境而不是mod_wsgi被編譯時,它不會顯示出來。當使用''python-home''時,它會錯誤地正確告訴你你做錯了什麼。 –