私のDjango(version = 1.4)プロジェクトにuwsgiを使用していますが、実行するとエラーが発生します
uwsgi --ini Django.ini
from Django.core.wsgi import get_wsgi_application ImportError:Django.core.wsgi という名前のモジュールはありません
しかし、次のようにDjango.core.wsgiをインポートできます。
>>> import Django.core.wsgi
django.iniファイル:
[uwsgi] chdir =/path/to/my/app module = app.wsgi:application master = True vacuum = True max-requests = 5000 socket = 127.0.0.1:9000
wsgi.py
import os
os.environ.setdefault("Django_SETTINGS_MODULE", "app.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from Django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Virtualenvを使用する場合は、home
をDjango.iniに追加してみてください。
home=/path/to/venv/
Webブラウザーでテストするには:
uwsgi --ini Django.ini --protocol=http
エラーImportError: No module named Django.core.wsgi
は通常、uwsgiがwsgi.pyファイルを読み取ろうとしたときに発生し、次の行に到達します。
from Django.core.wsgi import get_wsgi_application
Djangoがインストールされていないか、インストールされている場合はPYTHONPATHにないため、これらのモジュールを見つけることができません。
プロジェクトがvirtualenvにあり、Djangoがこのvirtualenvにのみインストールされている場合、どういうわけかDjangoモジュールが [ 〜#〜] pythonpath [〜#〜] 、つまりPythonが見つかりません。
興味があれば、次のコードをwsgi.py
ファイルに挿入して、PYTHONPATHを確認できます。
import os
print '===== sys.path / PYTHONPATH ====='
for k in sorted(os.environ.keys()):
v = os.environ[k]
print ('%-30s %s' % (k,v[:70]))
Virtualenvにインストールされているローカルバージョンのuwsgiを実行すると、パスは正しく設定されますが、グローバルバージョンのuwsgiを実行すると、通常はPYTHONPATHが正しく設定されません。
UWSGIにvirtualenvへのパスを伝えると、正しいPYTHONPATHがわかります。 --virtualenv
コマンドライン引数を使用するだけです。例:
uwsgi --http :8001 --module wsgi --virtualenv /home/jdoe/myvirtualenv
(次の引数は--virtualenvとまったく同じです:--venv、-home、-H)
不思議なことに、-virtualenv引数を使用しない場合、環境変数$VIRTUAL_ENV
が正しく設定されます。 wsgi.pyに挿入してこれをテストします。
print os.environ['VIRTUAL_ENV']
これは印刷されます:
/home/jdoe/myvirtualenv
しかし、PYTHONPATHはnotが正しく設定されており、virtualenvから何も含まれていません。
これがなぜなのか説明できません。
両方にgunicornをインストールした場合Sudo apt-get install gunicorn
および(venv) pip install gunicorn
、 使用する Sudo apt-get remove gunicorn
と仮想環境を再起動します。このように、それは私のために働いた。
私の場合、Djangoアプリケーションおよびその他すべてのPython3をインストールしましたが、uwsgiはPython2を使用していました。Python2またはPython3のどちらを使用しているかをuwsgiを実行しているときにログを確認し、次の場合はuwsgiを再インストールしてください。 uwsgi起動ログで以下のような行を探します。
Python version: 3.4.3 (default, Oct 14 2015, 20:31:36) [GCC 4.8.4]
VS Python version: 2.7.6 (default, Jun 22 2015, 18:01:27) [GCC 4.8.2]
シンボリックリンクを許可しないvirtualboxの共有フォルダーに仮想環境を作成したため、このエラーを受け取りました。いくつかのエラーを受け取りましたが、すべてが機能しているようだったので、このエラーが発生するまで続行しました。仮想環境を再作成し、エラーがないことを確認し、uwsgiがフォルダーを指すようにしたことで、問題は解決しました。
virtualenv
についての回答を受け入れたので、使用しているようです。この場合、Django
がvirtualenv
ディレクトリにインストールされていることを確認してください(venv
など)。
pip
からvirtualenv
の下に個別にインストールするか、手動でvenv
のサイトパッケージへのシンボリックリンクを作成できます(Unixのようなシステムを使用している場合)。
ln -s /usr/path_to_Django venv/lib/python2.7/site-packages/Django