web-dev-qa-db-ja.com

ImportError:uwsgi用のDjango.core.wsgiという名前のモジュールはありません

私の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()
20
user1687717

Virtualenvを使用する場合は、homeをDjango.iniに追加してみてください。

home=/path/to/venv/

Webブラウザーでテストするには:

uwsgi --ini Django.ini --protocol=http
10
sneawo

エラー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)

驚いたことに、$ VIRTUAL_ENVを設定してもPYTHONPATHには影響しません

不思議なことに、-virtualenv引数を使用しない場合、環境変数$VIRTUAL_ENVが正しく設定されます。 wsgi.pyに挿入してこれをテストします。

print os.environ['VIRTUAL_ENV']

これは印刷されます:

/home/jdoe/myvirtualenv

しかし、PYTHONPATHはnotが正しく設定されており、virtualenvから何も含まれていません。

これがなぜなのか説明できません。

18
Mads Skjern

両方にgunicornをインストールした場合Sudo apt-get install gunicornおよび(venv) pip install gunicorn、 使用する Sudo apt-get remove gunicornと仮想環境を再起動します。このように、それは私のために働いた。

15

私の場合、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]

2
Abhishek

シンボリックリンクを許可しないvirtualboxの共有フォルダーに仮想環境を作成したため、このエラーを受け取りました。いくつかのエラーを受け取りましたが、すべてが機能しているようだったので、このエラーが発生するまで続行しました。仮想環境を再作成し、エラーがないことを確認し、uwsgiがフォルダーを指すようにしたことで、問題は解決しました。

0
Nick Kanavati

virtualenvについての回答を受け入れたので、使用しているようです。この場合、Djangovirtualenvディレクトリにインストールされていることを確認してください(venvなど)。

pipからvirtualenvの下に個別にインストールするか、手動でvenvのサイトパッケージへのシンボリックリンクを作成できます(Unixのようなシステムを使用している場合)。

ln -s /usr/path_to_Django venv/lib/python2.7/site-packages/Django
0