所以这似乎是这个设置的一个非常普遍的问题,但我找不到任何适用于SO的解决方案。我已经设置了一个非常新的Ubuntu 15.04服务器,然后安装了nginx,virtualenv(和-wrapper)和uWSGI(通过apt-get,所以全局,不在virtualenv中)。
我的virtualenv位于/root/Env/example
。在virtualenv中,我安装了Django,然后在/ srv / www / example / app运行Django' startproject
命令,项目名称为example
,所以我隐约有这个结构:
-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设置是无用的)。
任何人都可以看到一些我没见过的明显路径错误吗?据我所知,基于我的目录结构以及ini中的其他所有内容,home
完全正确,那么为什么它不能处理这个ImportError?
答案 0 :(得分:4)
在我的情况下,我看到了这个问题,因为我试图运行的django应用程序是用python 3编写的,而uwsgi是为python 2配置的。我修复了问题:
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
答案 1 :(得分:-1)
正如@Freek所说,site指的是一个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可执行文件和包的位置。
答案 2 :(得分:-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