2015-05-26 24 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