web-dev-qa-db-ja.com

Django ApacheおよびVirtualenvImportError:サイトという名前のモジュールがありません

504ページ後のApacheからのエラー

[info] mod_wsgi (pid=): Python home /var/venv/mybox.
[info] mod_wsgi (pid=): Initializing Python.
ImportError: No module named site

これは、ほとんど構成されていないアプリです。

<IfModule mod_wsgi.c>
WSGIDaemonProcess myapp python-home=/var/venv/mybox
WSGIProcessGroup myapp
WSGIScriptAlias / /var/www/html/web/myapp/wsgi.py
WSGISocketPrefix /var/run/wsgi

<Directory /var/www/html/web>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
</IfModule>

私ができるすべての投稿とチュートリアルに従いました。私はCENTOS6を使用しています。 virutalenvを使用python 2.7デフォルトのシステムenvは2.6です

$ ldd /etc/httpd/modules/mod_wsgi.so
  linux-vdso.so.1 =>  (0x00007ffc06174000)

mywsgi.py

 import os,sys     
 from Django.core.wsgi import get_wsgi_application     
 os.environ.setdefault("Django_SETTINGS_MODULE", "myapp.settings")
 sys.path.insert(0,'/var/www/html/web')
 activate_this = '/var/venv/mybox/bin/activate_this.py'
 execfile(activate_this, dict(__file__=activate_this))
 application = get_wsgi_application()

PYHTONHOMEが設定されていません

5
Jabda

Mod_wsgiで仮想環境を使用するためのドキュメントは次の場所にあります。

あなたの場合で最も重要なのはセクションです:

そのセクションでは、次のように述べています。

Mod_wsgiでPython仮想環境を使用する場合、mod_wsgiが最初にコンパイルされたのと同じPythonインストールを使用して作成されていることが非常に重要です。 Python仮想環境を使用して、mod_wsgiに別のPythonバージョン、または別のPythonインストールを使用させることはできません。

たとえば、mod_wsgiが最初にPython 2.7用にコンパイルされたときに、Python3.5を使用して作成されたPython仮想環境を使用するようにmod_wsgiに強制することはできません。これは、最初にコンパイルされたPythonインストール用のPythonライブラリが、mod_wsgiモジュールに直接リンクされているためです。

したがって、最も可能性が高いのは、mod_wsgiがPython2.6用にコンパイルされていることです。この場合、Python2.7から作成されたPython仮想環境を使用するように強制することはできません。これを行うと、siteモジュールが欠落しているというエラーが表示されます。

そのmod_wsgiをシステムパッケージからアンインストールし、mod_wsgiをソースコードからインストールして、Python2.7に対してコンパイルする必要があります。これを行う最も簡単な方法は、次の説明のようにpip installメソッドを使用することです。

pip installを実行して仮想環境にインストールし、それを使用するためのApacheの構成に関するセクション「Apacheインストールへの接続」の指示に従います。

6

Apache2.4.6を使用してCentOS7で解決

私のサーバー全体はPython 2.7を使用していますが、すでにPython 3.6をインストールしており、virtualenvはPython 3.6を使用しています。

このコードでdjang.conf(/etc/httpd/conf.d/Django.conf)を構成した後:

<VirtualHost *:80>

WSGIDaemonProcess myProj python-home=/home/user/Django-site/env python-path=/home/user/Django-site
WSGIProcessGroup myProj
WSGIScriptAlias /myProj /home/user/Django-site/my-project/wsgi.py


Alias /static /home/user/Django-site/static
<Directory /home/user/Django-site/static>
    Require all granted
</Directory>

<Directory /home/user/Django-site/my-project>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

</VirtualHost>

そして、Apacheを再起動しました

Sudo systemctl restart httpd

このエラーが1000行発生しました(/ var/log/httpd/error_log)

ImportError: No module named site
ImportError: No module named site
ImportError: No module named site
ImportError: No module named site

ソリューション

最初:

Sudo grep wsgi /var/log/httpd/error_log

私はこれを得た:

[mpm_prefork:notice] [pid 62324] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.33 mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations

Pythonバージョン(2.7.5)に注意してください。Python 3.6が使用しているものに従ってmod_wsgiを取得するために行ったこと:

yum list *mod_wsgi*
Installed packages
mod_wsgi.x86_64                          3.4-18.el7                          @base
Disponible packages
python35u-mod_wsgi.x86_64                4.6.2-1.ius.centos7                 ius
python36u-mod_wsgi.x86_64                4.6.2-1.ius.centos7                 ius

次に、パッケージpython36u-mod_wsgi.x86_64をインストールしました。

Sudo yum install python36u-mod_wsgi.x86_64

次に、Apacheサービスを再起動しました。

Sudo systemctl restart httpd

そして、ログからこの新しい行を取得しました:

[Fri Mar 29 12:33:26.788716 2019] [mpm_prefork:notice] [pid 76317] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.33 mod_wsgi/4.6.2 Python/3.6 configured -- resuming normal operations

そして、すべてが機能します! :-)

それがあなたを助けることを願っています。 C ya!

これは ドキュメント から取得されます:WSGIScriptAlias//path/to/mysite.com/mysite/wsgi.py WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

これは特に仮想環境用ですpython仮想環境のサイトパッケージへのパスを書き込む必要があります)::

WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages

問題は-- PYTHONHOME にもある可能性があります

標準のPythonライブラリの場所を変更します。デフォルトでは、ライブラリはprefix/lib/pythonversionとexec_prefix/lib/pythonversionで検索されます。ここで、prefixとexec_prefixはインストールに依存するディレクトリであり、どちらもデフォルトです。/usr/localに。

PYTHONHOMEが単一のディレクトリに設定されている場合、その値はプレフィックスとexec_prefixの両方を置き換えます。これらに異なる値を指定するには、PYTHONHOMEをprefix:exec_prefixに設定します。

PYTHONHOMEをクリーンアップしてみてください:

user$ export PYTHONHOME=
1
Ariel Livshits