web-dev-qa-db-ja.com

uWSGI + virtualenv 'サイトという名前のモジュールはありません'

したがって、これはこのセットアップで非常に一般的な問題のようですが、SOで機能する解決策は見つかりません。非常に新しいUbuntu15.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
            ...

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で機能しないのでしょうか。

13

私の場合、この問題が発生したのは、実行しようとしたDjangoアプリがpython 3で記述されていたのに対し、uwsgiはpython 2.次の方法で問題を修正しました:

  1. python 2とpython 3つのアプリをサポートするためにuwsgiを再コンパイルします(私は 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
7
danyamachine