Python 3の場合、Ubuntuにmod_wsgiをインストールするための明確な手順を教えてもらえますか?
私はFlask&mod_wsgiをPython3を使用して正常に取得しましたが、しばらくの間は幸せでした。
... Apacheのログを見て、この問題が発生したことに気づくまで: https://askubuntu.com/questions/569550/assertionerror-using-Apache2-and-libapache2-mod-wsgi- py3-on-ubuntu-14-04-python
apt-get
は、古いバージョンのlibapache2-mod-wsgi-py3
をインストールしています。これにより、Apacheのログにエラーが発生します。 (これを報告する必要がありますか、報告する場合はどこですか?)
リンクでは、エンジニアはpip
を使用してより最新のバージョンをインストールしています。
興味深いことに、彼はそれを仮想Python3環境にインストールしているようです。 (これはシステムを使用する場合と何か違いますかpip3
?)
また、彼はpip3 install mod_wsgi
を使用していますが、pip3 search mod_wsgi
は以下を返します。
(編集:彼はそうではない、彼はpip3ではなくpipを使用している。それは正しいのだろうか?彼は自分の配線を交差させたか?pipはpy3venvにいるという事実を無視せず、単にシステムのpy2インストールを使用しますか?とにかくそれは混乱を解決しません...)
mod_wsgi-metrics - Metrics package for Apache/mod_wsgi.
cykooz.recipe.pastewsgi - Buildout recipe to create paste.deploy entry points for mod_wsgi or uwsgi
mod_wsgi-httpd - Installer for Apache httpd web server.
apachemiddleware - Useful Python middleware for use with mod_wsgi deployments
tranchitella.recipe.wsgi - Buildout recipe to create paste.deploy entry points for mod_wsgi
mod_wsgi - Installer for Apache/mod_wsgi.
では、mod_wsgi-httpd
とは何でしょうか。そして、これが私が欲しいものでないことは確かですか?
最後に、誰かがソースからmod_wsgiをインストールするためのリンクを提供できますか?
編集:エンジニアがpip install mod_wsgi
ではなくpip3 ...
を使用している理由がわかりません。確かにそれは正しくありませんか?しかし、pip3を使用すると、次のようになります。
pi@PiDroplet:~$ cd web/piFlask
pi@PiDroplet:~/web/piFlask$ source ./venv3/bin/activate
(venv3)
pi@PiDroplet:~/web/piFlask$ pip3 install mod_wsgi
Downloading/unpacking mod-wsgi
Downloading mod_wsgi-4.4.12.tar.gz (991kB): 991kB downloaded
Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py) Egg_info for package mod-wsgi
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module>
'missing Apache httpd server packages.' % APXS)
RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages.
Complete output from command python setup.py Egg_info:
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module>
'missing Apache httpd server packages.' % APXS)
RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages.
----------------------------------------
Cleaning up...
Command python setup.py Egg_info failed with error code 1 in /home/pi/web/piFlask/venv3/build/mod-wsgi
Storing debug log for failure in /home/pi/.pip/pip.log
そして今、私はpip3 install mod_wsgi-httpd
を試します、コンパイルするのに約5分かかります:
(venv3)
pi@PiDroplet:~/web/piFlask$ pip3 install mod_wsgi-httpd
Downloading/unpacking mod-wsgi-httpd
Downloading mod_wsgi-httpd-2.4.12.5.tar.gz
Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi-httpd/setup.py) Egg_info for package mod-wsgi-httpd
apr-1.5.2/
apr-1.5.2/config.layout
apr-1.5.2/build.conf
apr-1.5.2/emacs-mode
:
だから今、私は私のPy3 virtualenvに2番目のApacheがあるのではないかと心配しています。
しかし、それはエラーを取り除きます。 pip3 install mod_wsgi
が正常に完了するようになりました。
編集:しかし今、私は彼の指示に従うために完全に行き詰まりました:私は/etc/Apache2/mods-available/wsgi_express.load
を持っていません、そして彼がそれを作ることを提案しているなら、最初はこれは任意のように思われ、次に彼が置くことを提案するテキストつまり、LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi-py34.cpython-34m.so
-このファイルは私のシステムに存在しません。
私は/etc/Apache2/mods-available/wsgi.load
を持っています
再びテクノロジーに溺れて、誰かが私に一線を投げることはできますか?
Python 3仮想環境を有効にしていて、そのbinディレクトリがパスにある場合、おそらく「pip3」ではなく「pip」を実行するだけで済みます。「which pip」を実行して想定した仮想環境からのものかどうかを確認します。
「mod_wsgi-httpd」パッケージは、Apache自体の個別のインスタンスをインストールして、システム全体のApacheが古くなっている、または開発ヘッダーファイルがない、またはシステム全体の構成を変更できないという問題を回避するために特別に用意されています。システム全体の問題を修正するためのrootアクセス権がなく、非特権ポートでの実行のみに関心があるため、rootアクセス権が不要な場合は、通常、これはより適切です。また、「mod_wsgi-httpd」がインストールされているバージョンのApacheを使用する唯一の方法であるため、「mod_wsgi-httpd」がインストールされた後に「pip」がインストールされた「mod_wsgi」パッケージの「mod_wsgi-express」を使用する必要があります。 。
そのため、「mod_wsgi-httpd」の場合は、無視してください。すでにインストールしている場合は、 'pip'でそれと 'mod_wsgi'の両方をアンインストールします。後者は「mod_wsgi-httpd」Apacheバージョンにバインドされ、「mod_wsgi.so」はシステム全体で機能しないため、アンインストールする必要があります。
リンク内のユーザーのステップを分離することに関して、それらは正しいように見えますが、ステップ3では、追加されるLoadModule
およびWSGIPythonHome
行が実行時に出力されるものであることを強調する必要がありますmod_wsgi-express install-module
コマンド。何が出力されるかは、実際のインストール環境に合わせてカスタマイズされます。したがって、値を構成するのではなく、そのコマンド出力を使用してください。
wsgi.load
ファイルがまだ残っているので、Sudo a2dismod wsgi
削除するか、手動で削除します。古いシステムパッケージのmod_wsgiから残っています。
私はこの答えを「他の人に役立つかもしれない自己へのメモ」として意図しています。
apt-get
の執筆時点では、古いバージョンのmod_wsgi
がインストールされています。
pip
は最新バージョンをインストールします。これは、ソースコードをダウンロードしてコンパイルすることによって行われます。
Python3 virtualenvをセットアップし、source ./venv3/bin/activate
でアクティブ化します。which pip
が現在この環境を使用していることを確認してください。 pipとpip3は互換性があるようです。
私の場合、私の./venv3
はmy flaskフォルダ内にあります。そしてmod_wsgi
の唯一の目的は、Apacheルートにhttp://myfoo.org/flask
リクエストを送信してもらうことですflask app。したがって、mod_wsgi
をこのvenv3
にインストールすることは理にかなっています。
ただし、pip
を正常にコンパイルするには、まず必要なヘッダーファイルを提供するSudo apt-get install Apache2-dev
が必要です。その後、再起動が必要でした。その後、pip install mod_wsgi
は問題なく完了します。
次に、元のリンクの指示に従います。
(venv3)
$ Sudo venv3/bin/mod_wsgi-express install-module
LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi-py34.cpython-34m.so
WSGIPythonHome /home/pi/web/piFlask/venv3
次に、これらの2行をそれぞれ含む/etc/Apache2/mods-available/wsgi_express.{load,conf}
を作成する必要があります。
最後にモジュールを有効にし、Apacheのエラーログを確認します。
a2enmod wsgi
Sudo service Apache2 restart
cat /var/log/Apache2/error.log