web-dev-qa-db-ja.com

virtualenvとmod_wsgiを使用したApache:ImportError:「Django」という名前のモジュールはありません

私は次のApache設定で小さなDjangoプロジェクトを提供しようとしています:

Apache仮想ホスト設定:

<VirtualHost *>
    ServerName servername

    [...]

    <Directory "/path/to/project/project">
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages                           
    WSGIScriptAlias / /path/to/project/project/wsgi.py

</VirtualHost>

また、次のwsgi.pyもあります。

import os
from Django.core.wsgi import get_wsgi_application

os.environ.setdefault("Django_SETTINGS_MODULE", "example.settings")
application = get_wsgi_application()

STATICファイルとMEDIAファイルを提供しても問題ありません。

また、アクセス許可を確認し、755、次に777をvirtualenvのサイトパッケージディレクトリに再帰的に使用しようとしました。うまくいきませんでした。

しかし、私のサイトのルートに到達しようとすると、次のようになります:

from Django.core.wsgi import get_wsgi_application
ImportError: No module named 'Django'

Djangoが私のvirtualenvにインストールされているため、これはPythonパス関連の問題であると推測しました。 python WSGIDaemonProcesspython-path属性へのパスなので、なぜ機能しないのかわかりません。

関連するディレクトリをPython siteモジュールを使用してwsgi.pyのパスに追加 に追加できますが、なぜ私が試したApacheの設定が十分ではないのかを理解するために。

10
vmonteco

WSGIProcessGroupWSGIScriptAliasディレクティブまたは同等のオプションがないため、仮想環境を設定したデーモンプロセスグループで実際にアプリケーションが実行されていません。

mod_wsgiデーモンモードの使用 を参照してください

デーモンプロセスグループで実行している唯一のアプリケーションである場合は、アプリケーショングループが '%{GLOBAL}'に設定されていることを確認することもお勧めします。

したがって、次を使用します。

WSGIScriptAlias / /path/to/project/project/wsgi.py \
    process-group=project application-group=%{GLOBAL}

また、python-home仮想環境の場合。

    WSGIDaemonProcess project python-path=/path/to/project \
        python-home=/path/to/Envs/venv

見る:

21

私の担当者は50を超えていないためコメントできませんが、発見を共有したいと思います。

WSGIDaemonProcessでは、Python 3.5を使用している場合、@ graham-dumpletonが言うとおりに設定する必要があります。

python-home=/path/to/Envs/venv

明示的に設定します。

ただし、Python 3.4(または、私の知る限り2.7のような古いバージョン)Python)を使用している場合、次のように設定する必要があります。

python-path=/path/to/project:/path/to/Envs/venv/lib/python3.4/site-packages

質問者がしたことと同じように。

本当に変だ。

5
Valorad

私にとって問題は、python2用にmod wsgiをインストールしていたことでした。私はpython3のためにそれを再インストールする必要がありました:

Sudo apt-get install libapache2-mod-wsgi-py3
0
Marijus