web-dev-qa-db-ja.com

ターゲットWSGIスクリプトをPythonモジュールとしてロードできません

Mod_wsgiをApacheでデプロイしてDjangoアプリケーションを実行しようとしていますが、エラー500内部サーバーエラーが発生しています。

[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/Apache/Django.wsgi'.
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] Traceback (most recent call last):
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]   File "/home/user/bms/Apache/Django.wsgi", line 13, in <module>
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]     import Django.core.handlers.wsgi
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] ImportError: No module named Django.core.handlers.wsgi

私のApache仮想ホストは次のとおりです。

<VirtualHost *:80>

    DocumentRoot /home/user/bms

    <Directory /home/user/bms>
        Order allow,deny
        Allow from all
    </Directory>

WSGIDaemonProcess bms user=user group=user processes=2 threads=25 python-path=/usr/local/lib/python2.7/site-packages


    WSGIProcessGroup bms

    WSGIScriptAlias / /home/user/bms/Apache/Django.wsgi

</VirtualHost>

そして、0777権限を持つ私のappディレクトリの参照されたwsgiファイル:

import os
import sys

path = '/home/user/bms'
if path not in sys.path:
    sys.path.append(path)

os.environ['Django_SETTINGS_MODULE'] = 'bms.settings'

import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()

これは、Apacheユーザーが適切な権限を持っていないためかもしれないと聞きました。しかし、私はこれを修正する方法がわかりません。また、www-dataユーザーでデーモンを起動しようとしましたが、これで問題は解決しませんでした。

[〜#〜] edit [〜#〜]

これを解決するには、仮想ホストファイルをデフォルトのファイルにコピーしてから、a2dissiteで古いファイルを無効にします。 「適切に」それを行う方法がわからないので、Apacheが目的の仮想ホストに移動します。

46
Adam Thomas

私にとって問題はwsgi pythonバージョンの不一致でした。 python 3を使用していました。

$ Sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ Sudo apt-get install libapache2-mod-wsgi-py3

@alxsからの警告コピー/貼り付け前これらのコマンド:
wsgiとApacheを使用するサーバー上で実行されているpython 2つのプロジェクトがある場合、上記のコマンドはそれらを効果的にシャットダウンします。

48
nima

私にとっての問題は、WSGIスクリプトが実行可能でなかったことです。

Sudo chmod a+x Django.wsgi

あるいは単に

Sudo chmod u+x Django.wsgi

正しい所有者がいる限り

18
Gerry

ログのこのエラーメッセージで同様の問題が発生しました。

ターゲットWSGIスクリプト「/home/web2py/wsgihandler.py」は、Python module。

解決策は、不正なWSGIPythonHomeディレクティブ(アプリケーションディレクトリを指す)を/etc/httpd/conf.d/wsgi.conf

RedHatでCentOSリポジトリを使用しています。

Graham Dumpletonのインストール/構成手順に従うことをお勧めします。 helloworldアプリケーションに対して構成をテストすると、mod_wsgiは機能しており、構成に問題がありました。

ただし、エラーメッセージは、何が間違っていたかについてほとんど手がかりを与えませんでした。

5
user475443

私は同じ問題を抱えていましたが、最初はさらに下にスクロールして実際のエラーメッセージを確認できることに気付きませんでした。私の場合、それはインポートエラーでした:

ImportError: No module named bootstrap3

Pip(pip install Django-bootstrap3)を介してインストールした後、Apacheを再起動しました。

5
dnmh

この質問はかなり古いことは知っていますが、たった今8時間ほどこれと格闘しました。 SELinuxが有効なシステムがあり、virtualenvを特定の場所に配置した場合、mod_wsgiは指定されたpython-pathをサイトパッケージに追加できません。また、エラーも発生しません。指定されたpython-pathをサイトパッケージに追加するために使用するメカニズムは、Python siteモジュール、特にsite.adduserdir()であることが判明したためです。ディレクトリが存在しないかアクセスできない場合、このメソッドはエラーを発生させないため、mod_wsgiもエラーを発生させません。

とにかく、SELinuxをオフにしてみてください

Sudo setenforce 0

または、Apacheを実行しているプロセスがSELinuxとの適切なACLを持ち、virtualenvが存在するディレクトリにアクセスするようにします。

2
Alex Van Liew

_wsgi.py_にパスを追加するのが方向ですが、Djangoを追加する代わりに、パスを追加するsys.path.append("/path/to/virtual/environment/lib/pythonX.X/site-packages")が私のケースを修正しました。

これは、ubuntu 16.04でpython2.7を使用するDjangoプロジェクトの場合です。

1
lydfen

XamppのWindowsでの私自身のケースでは、次のようにwsgi.pyファイルにアプリケーションパスを誤ってロードしていました。

Incorrect

import sys

os.environ.setdefault("Django_SETTINGS_MODULE", "advisory_portal.settings")

application = get_wsgi_application()
sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')

の代わりに:

正しい:

import sys

sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')
os.environ.setdefault("Django_SETTINGS_MODULE", "advisory_portal.settings")

application = get_wsgi_application()

Sys python packageをインポートすることを忘れないでください

1
Dev

WSGIDaemonProcessオプションなしで試しましたか?

自宅でmod_wsgiをセットアップするのに問題はありませんでしたが、デーモンオプションなしでセットアップしました。仮想ホストファイルを移動して解決することについて言及しましたが、WSGIDaemonProcessのドキュメントでこの注意事項に注意してください。

また、デーモンプロセスグループの名前はサーバー全体で一意でなければならないことに注意してください。つまり、異なる仮想ホストで同じデーモンプロセスグループ名を使用することはできません。

それが偶然かどうかわからない。

1
John Pirie

私は同じ問題を抱えていて、それを使用して解決しました

Sudo easy_install cx_Oracle

ただし、easy_installを使用してインストールする前にcx_Oracleをアンインストールすることを忘れないでください。

アンインストールするコマンド:pip uninstall cx_Oracle

0
Bicky

これらのオプションの多くを試してみた後、最終的に私にとってうまくいった解決策は簡単でしたが、実際にどのパスを使用するかを理解するのに苦労したため、とらえどころのないものでした。

次のコマンドを使用して、Djangoに基づくメザニンプロジェクトを作成しました。ここにリストして、パスを明示します。

/var/www/mysite$ python3 -m venv ./venv
/var/www/mysite$ source ./venv/bin/activate
(venv) /var/www/mysite$ mezzanine-project mysite
(venv) /var/www/mysite$ cd mysite
(venv) /var/www/mysite/mysite$

さて、wsgi.pyファイルへのパスは次のとおりです。

/var/www/mysite/mysite/mysite/wsgi.py

/etc/Apache2/sites-available/mysite.confファイル内でこのインストールで機能したディレクティブは次のとおりです。

...<VirtualHost...>
    ...
    WSGIDaemonProcess mysite python-home=/var/www/mysite/venv python-path=/var/www/mysite/mysite
    WSGIProcessGroup mysite
    WSGIScriptAlias / /var/www/mysite/mysite/mysite/wsgi.py process-group=accounting
    <Directory /var/www/mysite/mysite/mysite>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    ...
</VirtualHost>...

Python-homeとpython-pathの多数のバージョンを試したところ、OPのエラーが繰り返し発生しました。ここで正しいパスを使用すると、wsgi.pyファイルにパスを追加することなく( mezzanine で提供され、 @ Dev's answer と同じことを達成し、私の場合)。

0
mightypile

この質問が、この質問にタイトルを与えるエラーを引き起こす問題の解決策を収集するための一種のプールになったので、私もこれを追加したいと思います。

私の場合、Ubuntu 16.04.2でApacheとWSGIを使用してOpenStack Keystone(Ocata)を実行します。プロセスは開始されますが、キーストーンを照会するとすぐに

mod_wsgi (pid=20103): Target WSGI script '/opt/openstack/bin/keystone-wsgi-public' cannot be loaded as Python module.

2つの仮想ホストがあり、1つは

WSGIDaemonProcess keystone-public ...
WSGIProcessGroup keystone-public ...

もう一方は持っていた

WSGIDaemonProcess keystone-admin ...
WSGIProcessGroup keystone-admin ...

名前を変更して問題を解決しました。 vhostエントリは次のようになります。

WSGIDaemonProcess kst-pub ...
WSGIProcessGroup kst-pub ...

そして

WSGIDaemonProcess kst-adm ...
WSGIProcessGroup kst-adm ...

私はこれ以上調査しませんでした。私の作品として解決しました。

0
user1129682

Apacheログエラー「wsgi.pyをPython module。としてロードできません。

Apacheを再起動するのではなく、停止してから起動する必要がありました。

0
curtisp

プロジェクトのPython依存関係をvirtualenv内にインストールする場合、このvirtualenvのディレクトリへのパスをPythonパスにも追加する必要があります。これは、UNIXのようなシステムを使用する場合はコロン(:)で、Windowsを使用する場合はセミコロン(;)で区切られた複数のパスで、WSGIPythonPathディレクティブに追加のパスを追加します

0
dong

リストに追加すると、これがどのように機能するかがわかります。

ソースからCentOS 7にCKAN 2.7.2をインストールしようとしましたが、このエラーが発生し続けました。私にとっては、SELinuxが有効になっていたからです。無効にする必要はありませんでした。代わりに、 https://www.endpoint.com/blog/2010/10/13/selinux-httpd-modwsgi-26-rhel-centos-5 を読んだ後、httpd_can_network_connectの有効化が修正されたことがわかりました。それ:

setsebool -P httpd_can_network_connect on

そのページから:

httpd_can_network_connect-データベースへのローカル接続を含め、httpdがネットワーク接続を確立できるようにします

0
John Doyle

このエラーが発生していました。 Apacheログでこれを見つけた仮想環境でpython 3を使用しています

[2018年12月21日08:01:43.471561 2018] [mpm_prefork:notice] [pid 21786] AH00163:Apache/2.4.6(Red Hat Enterprise Linux)mod_wsgi/3.4 Python/2.7.5の構成-通常の操作の再開

yum -y install mod_wsgiを使用してwsgiをインストールしました。これにより、python 2用にコンパイルされたmod_wsgiがインストールされました。

yum remove mod_wsgi

python 3を使用してコンパイルされたmod_wsgiをインストールしました

yum install python35u-mod_wsgi

それはその後働いた

0
Leroy Kayanda