2015-05-26 26 views
11

所以這似乎是這個設置的一個真正常見的問題,但我找不到任何解決方案在SO上工作。我已經安裝了一個非常新的Ubuntu 15.04服務器,然後安裝了nginx,virtualenv(和-wrapper)和uWSGI(通過apt-get,所以在全球範圍內,不在virtualenv中)。uWSGI + virtualenv'No module named site'

我的virtualenv位於/root/Env/example。裏面的virtualenv,我安裝的Django,然後在/ SRV /網絡/例子/應用程序運行與項目名稱example Django的startproject命令,所以我有隱約這種結構:

-root 
    -Env 
    -example 
     -bin 
     -lib 
-srv 
    -www 
    -example 
     -app 
     -example 
      manage.py 
      -example 
      wsgi.py 
      ... 

我對uWSGI example.ini文件看起來是這樣的:

[uwsgi] 
project = example 

plugin = python 

chdir = /srv/www/example/app/example 
home = /root/Env/example 
module = example.wsgi:application 

master = true 
processes = 5 

socket = /run/uwsgi/app/example/example.socket 
chmod-socket = 664 
uid = www-data 
gid = www-data 
vacuum = true 

但無論我是否通過uwsgi --ini /etc/uwsgi/apps-enabled/example.ini或通過後臺程序運行它,我得到確切的同樣的錯誤:

Python version: 2.7.9 (default, Apr 2 2015, 15:37:21) [GCC 4.9.2] 
Set PythonHome to /root/Env/example 
ImportError: No module named site 

我應該注意到,Django項目通過內置的開發服務器./manage.py runserver工作,並且當我刪除home = /root/Env/example時,這個東西可以工作(但顯然使用全局Python和Django而不是virtualenv版本,這意味着它對於一個適當的virtualenv設置)。

任何人都可以看到一些明顯的路徑錯誤,我沒有看到?據我所知,home是完全正確的,基於我的目錄結構以及ini中的其他所有內容,那麼爲什麼它不適用於此ImportError?

+1

是否已解決? –

回答

-5

site模塊位於django的根目錄下。

首先檢查是手動激活virtualenv(source /root/Env/example/bin/activate,啓動python和import site)。如果失敗,請安裝django。

假設django已正確安裝在virtualenv中,請確保uWSGI激活virtualenv。相關uWSGI配置指令:

plugins = python 
virtualenv = /root/Env/example 

,倘若你有錯誤導入example.wsgi

pythonpath = /srv/www/example/app/example 
-1

正如@Freek說,網站是指一個Python模塊。

該錯誤聲稱,python無法找到該包,這是因爲您指定了python_home到錯誤的位置。

我遇到同樣的問題,我的uwsgi.ini是象下面這樣:

[uwsgi] 
# variable 
base = /home/xx/ 
# project settings 
chdir = %(base)/ 
module = botservice.uwsgi:application 
home = %(base)/env/bin 

對於這種配置uwsgi可以在/ env的/ bin中的Python可執行文件,但沒有包可以在此文件夾下找到。所以我改變了家,以

home = %(base)/env/ 

它爲我工作。

就你而言,我建議挖掘home指令,並將它指向包含python可執行文件和軟件包的位置。

3

以我爲例,我是看到這個問題,因爲Django應用程序,我試圖運行寫在Python 3,而uwsgi被配置爲蟒蛇2.我的解決了這一問題:

  1. 重新編譯uwsgi到同時支持蟒2和Python 3個應用 (I接着this指南)
  2. 添加此我mydjangoproject_uwsgi.ini:
plugins   = python35 # or whatever you specified while compiling uwsgi 

對於其他使用Django的人,您還應該確保您正確地指定以下內容:

# Django dir that contains manage.py 
chdir   = /var/www/project/myprojectname 
# Django wsgi (myprojectname is the name of your top-level project) 
module   = myprojectname.wsgi:application 
# the virtualenv you are using (full path) 
home   = /home/ubuntu/Env/mydjangovenv 
plugins   = python35