uWSGI + virtualenv'没有名为site的模块'

Mat*_*ton 12 virtualenv uwsgi

所以这似乎是这个设置的一个非常普遍的问题,但我找不到任何适用于SO的解决方案.我已经设置了一个非常新的Ubuntu 15.04服务器,然后安装了nginx,virtualenv(和-wrapper)和uWSGI(通过apt-get,所以全局,不在virtualenv中).

我的virtualenv位于/root/Env/example.在virtualenv里面,我安装了Django,然后在/ srv/www/example/app startproject用项目名称运行Django的命令example,所以我隐约有这个结构:

-root
  -Env
    -example
      -bin
      -lib
-srv 
  -www
    -example
      -app
        -example
          manage.py
          -example
            wsgi.py
            ...
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)

但无论我是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
Run Code Online (Sandbox Code Playgroud)

我应该注意到Django项目是通过内置开发服务器工作的./manage.py runserver,当我删除home = /root/Env/example这个东西时(但显然使用的是全局Python和Django而不是virtualenv版本,这意味着它对于正确的virtualenv设置没用) .

任何人都可以看到一些我没有看到的明显路径错误吗?据我所知,home基于我的目录结构和ini中的其他所有内容完全正确,那么为什么它不能处理这个ImportError?

dan*_*ine 5

就我而言,我看到了这个问题,因为我尝试运行的django应用是用python 3编写的,而uwsgi是为python 2配置的。我通过以下方法解决了该问题:

  1. 重新编译uwsgi以同时支持python 2和python 3应用程序(我遵循了指南)
  2. 将此添加到mydjangoproject_uwsgi.ini中:
plugins         = python35 # or whatever you specified while compiling uwsgi 
Run Code Online (Sandbox Code Playgroud)

对于使用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
Run Code Online (Sandbox Code Playgroud)


Fre*_*jer -5

site模块位于 django 的根目录中。

首先检查是手动激活 virtualenv(source /root/Env/example/bin/activate、启动 python 和import site)。如果失败,请 pip install django。

假设 django 已正确安装在 virtualenv 中,请确保 uWSGI 激活 virtualenv。相关uWSGI配置指令:

plugins = python
virtualenv = /root/Env/example
Run Code Online (Sandbox Code Playgroud)

如果导入时出错example.wsgi

pythonpath = /srv/www/example/app/example
Run Code Online (Sandbox Code Playgroud)